memory オペレーターのdepthが何なのか調べてみた

ツイッターでMemoryオペレーターのdepthがどういう働きなのかという話題があがっていたので間単に調べてみた。

まずはObj.To Particleでパーティクルを適当に動かしてみる。

シンプルな動き。

この動きをMemoryオペレーターのpositonで保存する。depthの深さを10にしてみる。 

次に、新たにMemoryオペレーターをつくります。そのオペレータから記録したポジション情報を取り出し、Positon Bornオペレータで新しいパーティクルを発生させる。スピードを0、lipespanを30、レート(count)を10にする。

簡単なトレイルのようなものが出来た。

ここで更に記録を取り出したMemoryオペレーターのdepthの数値を変えてみる。
Integerヘルパーを出してMemoryオペレーターのdepthに繋ぎ、数値を10にする。

するとこのような動きになる。

https://twitter.com/notchmen/status/207360148627398657
@notchmenさんの発言によると
depthを指定してやることで、過去情報を取り出せます

ということですので。 そのとおりdepthを10にすると10f過去の数値を取り出せているようですね。ちゃんとdepthを理解できたということでいいかな?

米岡さんの記事をやってみる:(TP Basic) Memory Operatorの基本

http://sky-high-nest.sblo.jp/article/51381532.html

本当に親切に解説してくれていた。

今回触れられていないけど、memory オペレータのdepthの意味がわからなかったのでリファレンスを読んでみようとしたが、さっぱり。joeさんのDVDでもdepthを99にする作業が頻繁に出てくるがいまだによくわからない。
もしかして。Memory Operatorのdepthが0でいいっていうのは毎フレームごとに格納して使用して、ってやってるからdepth0でいいんだろうか。
今回だと、床にヒットするパーティクルが1fに複数の場合に0以上が必要なのかも。

あと使ったノードで不明だった点をメモとしてまとめた。

Node:O Alignment

http://www.cebas.com/wikka/wikka.php?wakka=AlignmentOperator

Alignment Opetratorは一般的にはパーティクルを進行方向に向けるためのもの。他にも向いている方向を制御するためにいくつかのパラメーターが用意されている。

 


 

 

 

 

 

 

Laziness:Lazinessは怠惰という意味。0にしておけばすぐに指示通りの方向に従うが、数値を上げるごとに遅れて動くことになる。

・None – これは、デフォルトの配置を有する粒子を残します。
・Randam – このオプションを選択すると、すべての粒子は、ランダムなベクトルを使用しています。
・Direction of Travel – 動きベクトルに沿ってパーティクル整列させたい場合は、このオプションを選択します。
・WorldX、Y、Z – このオプションでは、X、YまたはZの世界軸に沿って粒子を揃えかもしれ選択しました。
・User Defined – 特定の方向ベクトルを設定するか、ポジション入力への入力データ·ストリームを使用する場合場合は、このオプションを選択する。
・To Particle – 他の粒子との関係で整列させることができる。このオプションを使用するには、入力データ·ストリームで制御する(まだ不明)。


つまり、進行方向にパーティクルを向かせる場合は、Direction of Travelを選べばいいってことでOK?

Node:O Position Born

http://www.cebas.com/wikka/wikka.php?wakka=PositionBornOperator#hn_Position_Born_Operator

Position Born is an operator that conditionally creates particles at a specific position in space.

While the Position Born operator creates particles on its own without needing any input data streams, like most other operators in thinkingParticle , it can be controlled in a rule-based manner. Be aware that the ON input data stream can be connected (through another collection of operators and conditions) and through its connection it can create some advanced and amazing effects. Make sure to read the description about the Pistol Shot option of this operator to see what can be achieved.

ポジション指定ができる一般的なパーティクル発生源。
たくさんの入力がある。
発生タイプのPistolShotはデータストリームのONが”true”になったときに数字の分だけパーティクルが生まれる。1にしておくと1個生まれる。

Node:C Distance

http://www.cebas.com/wikka/wikka.php?wakka=DistanceCondition

The Distance Condition measures the distance between two particles or objects. You may choose any two objects you want to measure the distance between, even standard 3ds Max mesh objects can be piped into this condition and used for the distance measurement. When you want to use a mesh, an ObjectToParticle Operator or a Node Helper creates the relevant information to be used as position inputs. Whenever the distance reaches a certain amount, a “true” output is generated.

2つのパーティクルやオブジェクトの距離を測るノード。
メッシュの距離を測る場合はObjectToParticleかNodeヘルパーを使う。
2点を入力すると距離を測るだけではなく、方向(direction)を出力することもできる。
Position2のインプットが始点、Position1のインプットが終点なことに注意。

距離が一定量に達するたびに、 “true”が出力される。
これはロールアウトにRadius1とRadius2があり。2点がこの距離内にあるときに”true”を出力するという意味。

 

TP 4.0 for Production 1.0のmathをやってるんだが英語が。

https://sites.google.com/site/m3dgptpprojects/home/tp4-projects/dvd-projects/tp4_dvd-1

このmathのパートをやってるんだけど、難しい。
ここの趣向としてはmake lineを使ってベクトルの計算とかの基礎を教えてくれてるんだと思う。
それ自体は難しくないんだけど、英語でその言葉を追いかけられないので何をいてるのかわからなくなる。操作自体はおいかけられるんだけどな。
tPに慣れてきたら もういちどチャレンジしてみようと思う。

次に行こう。

value To timeその3:Value To Timeでのノーマライズの実際

前回LifeSpanにバリエーションをつけずにすべて60fとしたもので作りました。それが以下です。

そこでLifeSpanのVariationを50%にしてみる。

すると以下のようになる。

variationによって短くなっているヤツの消え方がおかしいですね。
ログを見てみると。

t = 0 dt = 160
birth >> *Age = Frames=0 Ticks=0
t = 160 dt = 160
birth >> *Age = Frames=1 Ticks=0
t = 320 dt = 160
birth >> *Age = Frames=2 Ticks=0
t = 480 dt = 160
birth >> *Age = Frames=3 Ticks=0
t = 640 dt = 160
birth >> *Age = Frames=4 Ticks=0
t = 800 dt = 160
birth >> *Age = Frames=5 Ticks=0
t = 960 dt = 160
birth >> *Age = Frames=6 Ticks=0
t = 1120 dt = 160
birth >> *Age = Frames=7 Ticks=0
t = 1280 dt = 160
birth >> *Age = Frames=8 Ticks=0
t = 1440 dt = 160
birth >> *Age = Frames=9 Ticks=0
t = 1600 dt = 160
birth >> *Age = Frames=10 Ticks=0
t = 1760 dt = 160
birth >> *Age = Frames=11 Ticks=0
t = 1920 dt = 160
birth >> *Age = Frames=12 Ticks=0
t = 2080 dt = 160
birth >> *Age = Frames=13 Ticks=0
t = 2240 dt = 160
birth >> *Age = Frames=14 Ticks=0
t = 2400 dt = 160
birth >> *Age = Frames=15 Ticks=0
birth >> *Age = Frames=0 Ticks=0
t = 2560 dt = 160
birth >> *Age = Frames=16 Ticks=0
birth >> *Age = Frames=1 Ticks=0
t = 2720 dt = 160
birth >> *Age = Frames=17 Ticks=0
birth >> *Age = Frames=2 Ticks=0
t = 2880 dt = 160
birth >> *Age = Frames=18 Ticks=0
birth >> *Age = Frames=3 Ticks=0
t = 3040 dt = 160
birth >> *Age = Frames=19 Ticks=0
birth >> *Age = Frames=4 Ticks=0
t = 3200 dt = 160
birth >> *Age = Frames=20 Ticks=0
birth >> *Age = Frames=5 Ticks=0
t = 3360 dt = 160
birth >> *Age = Frames=21 Ticks=0
birth >> *Age = Frames=6 Ticks=0
t = 3520 dt = 160
birth >> *Age = Frames=22 Ticks=0
birth >> *Age = Frames=7 Ticks=0
t = 3680 dt = 160
birth >> *Age = Frames=23 Ticks=0
birth >> *Age = Frames=8 Ticks=0
t = 3840 dt = 160
birth >> *Age = Frames=24 Ticks=0
birth >> *Age = Frames=9 Ticks=0
t = 4000 dt = 160
birth >> *Age = Frames=25 Ticks=0
birth >> *Age = Frames=10 Ticks=0
t = 4160 dt = 160
birth >> *Age = Frames=26 Ticks=0
birth >> *Age = Frames=11 Ticks=0
t = 4320 dt = 160
birth >> *Age = Frames=27 Ticks=0
birth >> *Age = Frames=12 Ticks=0
t = 4480 dt = 160
birth >> *Age = Frames=28 Ticks=0
birth >> *Age = Frames=13 Ticks=0
t = 4640 dt = 160
birth >> *Age = Frames=29 Ticks=0
birth >> *Age = Frames=14 Ticks=0
t = 4800 dt = 160
birth >> *Age = Frames=30 Ticks=0
birth >> *Age = Frames=15 Ticks=0
birth >> *Age = Frames=0 Ticks=0
t = 4960 dt = 160
birth >> *Age = Frames=31 Ticks=0
birth >> *Age = Frames=16 Ticks=0
birth >> *Age = Frames=1 Ticks=0
t = 5120 dt = 160
birth >> *Age = Frames=32 Ticks=0
birth >> *Age = Frames=17 Ticks=0
birth >> *Age = Frames=2 Ticks=0
t = 5280 dt = 160
birth >> *Age = Frames=33 Ticks=0
birth >> *Age = Frames=18 Ticks=0
birth >> *Age = Frames=3 Ticks=0
t = 5440 dt = 160
birth >> *Age = Frames=34 Ticks=0
birth >> *Age = Frames=19 Ticks=0
birth >> *Age = Frames=4 Ticks=0
t = 5600 dt = 160
birth >> *Age = Frames=35 Ticks=0
birth >> *Age = Frames=20 Ticks=0
birth >> *Age = Frames=5 Ticks=0
t = 5760 dt = 160
birth >> *Age = Frames=36 Ticks=0
birth >> *Age = Frames=21 Ticks=0
birth >> *Age = Frames=6 Ticks=0
t = 5920 dt = 160
birth >> *Age = Frames=37 Ticks=0
birth >> *Age = Frames=22 Ticks=0
birth >> *Age = Frames=7 Ticks=0
t = 6080 dt = 160
birth >> *Age = Frames=38 Ticks=0
birth >> *Age = Frames=23 Ticks=0
birth >> *Age = Frames=8 Ticks=0
t = 6240 dt = 160
birth >> *Age = Frames=39 Ticks=0
birth >> *Age = Frames=24 Ticks=0
birth >> *Age = Frames=9 Ticks=0
t = 6400 dt = 160
birth >> *Age = Frames=40 Ticks=0
birth >> *Age = Frames=25 Ticks=0
birth >> *Age = Frames=10 Ticks=0
t = 6560 dt = 160
birth >> *Age = Frames=41 Ticks=0
birth >> *Age = Frames=26 Ticks=0
birth >> *Age = Frames=11 Ticks=0
t = 6720 dt = 160
birth >> *Age = Frames=42 Ticks=0  一個目終了age42
birth >> *Age = Frames=27 Ticks=0
birth >> *Age = Frames=12 Ticks=0
t = 6880 dt = 160
birth >> *Age = Frames=0 Ticks=-1
birth >> *Age = Frames=28 Ticks=0
birth >> *Age = Frames=13 Ticks=0
t = 7040 dt = 160
birth >> *Age = Frames=29 Ticks=0
birth >> *Age = Frames=14 Ticks=0
t = 7200 dt = 160
birth >> *Age = Frames=30 Ticks=0
birth >> *Age = Frames=15 Ticks=0
t = 7360 dt = 160
birth >> *Age = Frames=31 Ticks=0
birth >> *Age = Frames=16 Ticks=0
t = 7520 dt = 160
birth >> *Age = Frames=32 Ticks=0
birth >> *Age = Frames=17 Ticks=0
t = 7680 dt = 160
birth >> *Age = Frames=33 Ticks=0
birth >> *Age = Frames=18 Ticks=0
t = 7840 dt = 160
birth >> *Age = Frames=34 Ticks=0
birth >> *Age = Frames=19 Ticks=0
t = 8000 dt = 160
birth >> *Age = Frames=35 Ticks=0
birth >> *Age = Frames=20 Ticks=0
t = 8160 dt = 160
birth >> *Age = Frames=36 Ticks=0
birth >> *Age = Frames=21 Ticks=0
t = 8320 dt = 160
birth >> *Age = Frames=37 Ticks=0
birth >> *Age = Frames=22 Ticks=0
t = 8480 dt = 160
birth >> *Age = Frames=38 Ticks=0
birth >> *Age = Frames=23 Ticks=0
t = 8640 dt = 160
birth >> *Age = Frames=39 Ticks=0
birth >> *Age = Frames=24 Ticks=0
t = 8800 dt = 160
birth >> *Age = Frames=40 Ticks=0
birth >> *Age = Frames=25 Ticks=0
t = 8960 dt = 160
birth >> *Age = Frames=41 Ticks=0
birth >> *Age = Frames=26 Ticks=0
t = 9120 dt = 160
birth >> *Age = Frames=42 Ticks=0
birth >> *Age = Frames=27 Ticks=0
t = 9280 dt = 160
birth >> *Age = Frames=43 Ticks=0  2個目終了age43
birth >> *Age = Frames=28 Ticks=0
t = 9440 dt = 160
birth >> *Age = Frames=0 Ticks=-1
birth >> *Age = Frames=29 Ticks=0
t = 9600 dt = 160
birth >> *Age = Frames=30 Ticks=0
t = 9760 dt = 160
birth >> *Age = Frames=31 Ticks=0
t = 9920 dt = 160
birth >> *Age = Frames=32 Ticks=0
t = 10080 dt = 160
birth >> *Age = Frames=33 Ticks=0
t = 10240 dt = 160
birth >> *Age = Frames=34 Ticks=0
t = 10400 dt = 160
birth >> *Age = Frames=35 Ticks=0
t = 10560 dt = 160
birth >> *Age = Frames=36 Ticks=0
t = 10720 dt = 160
birth >> *Age = Frames=37 Ticks=0
t = 10880 dt = 160
birth >> *Age = Frames=38 Ticks=0
t = 11040 dt = 160
birth >> *Age = Frames=39 Ticks=0
t = 11200 dt = 160
birth >> *Age = Frames=40 Ticks=0
t = 11360 dt = 160
birth >> *Age = Frames=41 Ticks=0
t = 11520 dt = 160
birth >> *Age = Frames=42 Ticks=0
t = 11680 dt = 160
birth >> *Age = Frames=43 Ticks=0
t = 11840 dt = 160
birth >> *Age = Frames=44 Ticks=0
t = 12000 dt = 160
birth >> *Age = Frames=45 Ticks=0
t = 12160 dt = 160
birth >> *Age = Frames=46 Ticks=0
t = 12320 dt = 160
birth >> *Age = Frames=47 Ticks=0
t = 12480 dt = 160
birth >> *Age = Frames=48 Ticks=0
t = 12640 dt = 160
birth >> *Age = Frames=49 Ticks=0
t = 12800 dt = 160
birth >> *Age = Frames=50 Ticks=0  3個目終了age50
t = 12960 dt = 160
birth >> *Age = Frames=0 Ticks=-1

となっています。
3個パーティクルがあって1つめから順番に
LifeSpan(age)が42、43、50となっています。
そのため本来60まであることを想定されたValue To TimeとFloatの仕組みが途中で切れているので最後の縮小までいけてません。
つまりLifeSpanのVariationが0%なら全部60なので問題がないのだけど、Variationが入っちゃうと60以外の数字が入ってきちゃうのでなんとかしなければいけないというわけみたいです。

じゃあどうするかというと、
ここで米岡さんのサイトには
(TP Basic)Value To Timeの基本
ライフスパンのノーマライズとは「パーティクルエイジ÷ライフスパン」の計算をして0から1の結果を求めることです 。

とあります。
ちょっとやってみてDebugで数値をみてみましょう。

わかりやすいようにパーティクルは一個。
O birthのLifeSpanとAgeからAdd&Multiplyに繋いでA/Bの計算をします。
その計算結果をDebugで見てみましょう。
Debugはどこかに繋がないと出ないのでちょっとFloatに繋がせてもらいましょう。
それでこの計算結果ですが、0fからタイムスライダーを進めていくと以下のようになりました。

Add&Multiply >> Value = 0
t = 160 dt = 160
Add&Multiply >> Value = 0.0233952
t = 320 dt = 160
Add&Multiply >> Value = 0.0467905
t = 480 dt = 160
Add&Multiply >> Value = 0.0701857
t = 640 dt = 160
Add&Multiply >> Value = 0.0935809
t = 800 dt = 160
Add&Multiply >> Value = 0.116976
t = 960 dt = 160
Add&Multiply >> Value = 0.140371
t = 1120 dt = 160
Add&Multiply >> Value = 0.163767
t = 1280 dt = 160
Add&Multiply >> Value = 0.187162
t = 1440 dt = 160
Add&Multiply >> Value = 0.210557
t = 1600 dt = 160
Add&Multiply >> Value = 0.233952
t = 1760 dt = 160
Add&Multiply >> Value = 0.257348
t = 1920 dt = 160
Add&Multiply >> Value = 0.280743
t = 2080 dt = 160
Add&Multiply >> Value = 0.304138
t = 2240 dt = 160
Add&Multiply >> Value = 0.327533
t = 2400 dt = 160
Add&Multiply >> Value = 0.350928
t = 2560 dt = 160
Add&Multiply >> Value = 0.374324
t = 2720 dt = 160
Add&Multiply >> Value = 0.397719
t = 2880 dt = 160
Add&Multiply >> Value = 0.421114
t = 3040 dt = 160
Add&Multiply >> Value = 0.444509
t = 3200 dt = 160
Add&Multiply >> Value = 0.467905
t = 3360 dt = 160
Add&Multiply >> Value = 0.4913
t = 3520 dt = 160
Add&Multiply >> Value = 0.514695
t = 3680 dt = 160
Add&Multiply >> Value = 0.53809
t = 3840 dt = 160
Add&Multiply >> Value = 0.561486
t = 4000 dt = 160
Add&Multiply >> Value = 0.584881
t = 4160 dt = 160
Add&Multiply >> Value = 0.608276
t = 4320 dt = 160
Add&Multiply >> Value = 0.631671
t = 4480 dt = 160
Add&Multiply >> Value = 0.655066
t = 4640 dt = 160
Add&Multiply >> Value = 0.678462
t = 4800 dt = 160
Add&Multiply >> Value = 0.701857
t = 4960 dt = 160
Add&Multiply >> Value = 0.725252
t = 5120 dt = 160
Add&Multiply >> Value = 0.748647
t = 5280 dt = 160
Add&Multiply >> Value = 0.772043
t = 5440 dt = 160
Add&Multiply >> Value = 0.795438
t = 5600 dt = 160
Add&Multiply >> Value = 0.818833
t = 5760 dt = 160
Add&Multiply >> Value = 0.842228
t = 5920 dt = 160
Add&Multiply >> Value = 0.865624
t = 6080 dt = 160
Add&Multiply >> Value = 0.889019
t = 6240 dt = 160
Add&Multiply >> Value = 0.912414
t = 6400 dt = 160
Add&Multiply >> Value = 0.935809
t = 6560 dt = 160
Add&Multiply >> Value = 0.959205
t = 6720 dt = 160
Add&Multiply >> Value = 0.9826
t = 6880 dt = 160
Add&Multiply >> Value = -0.00014622

となりました。0から始まってほぼ1まで進んでいますね。
つまりこうすることによってそのパーティクルが寿命のうちどの位置にいるのかわかるということですね。
0がスタートで1がゴールです。
じゃあこの数値をどのように活用するのか。
先ほどの米岡さんのページには以下のように書いてあります。

そしてそこから出された計算結果をValue To Timeに送ります。Add&Multiplyから出力される値は常に0から1なのでValue1には0をValue2には1を設定します。後は先ほど使ったfloatノードのアニメーションを再利用します。 

Value To TimeのValueに繋いげばいいのか。今までlifspanの数値で0から60fとしていたところをAdd&Multiplyから出た0から1に変更してやるんですね。

する動画はこうなりました。状態をおさらいすると
・LifeSpanは60。variationは50%
・パーティクルはわかりやすいように10個出している
・Value To Timeにはノーマライズされた0から1の値が入る。

やっとできました。うまくいってますね。
これはスケール以外のものにも幅広く使えそうですね。

 

value To timeその2:Value To Time+Floatをち ゃんと調べてみた

じゃあさっそくValue To Timeを使ってみる。
20e6b30a77580c73a90d4b7c42cfe5b4.png
Value To TimeのAgeからValue to Timeのvalueに繋ぐ。

まあvalueといってもageの値です。ageが0のときはtimeは0。ageが60のときはtimeが60なのかな。
そしてtimeの幅を見るに0から60fのタイムラインを個別のパーティクルが持ったということなんだと思う。
つまりこの場合valueもtimeも時間なのか。リマップしますというだけなんだな。

なのでfloatの値にキーを打って0から60でカーブをかいてあげると。このような動きになります。


じゃあtime2を30にした場合どうなるか。
こうなる。

つまりこのカーブの0から30fまでしか使われなくて後半は無視されてるんですね。


ノーマライズのテストは次回。

value To timeその1:Value To Time学習の前に・・・Ageの値ってどうなってるの?Debugの仕方とともに学習

value To timeのノーマライズの勉強をしようと思ったらParticle Ageの値がどう変化しているのかわからなかったので、調べてみた。

そのためにはdebugをしないといけないらしいので単純な1パーティクルだけ出力するシーンを作って調べることに。LifeSpanは60にしています。

f53d0ccc9e9ced8fd0f74787c4e4084f.png
シンプルなシーン

d070ec5270ea3215cb5029e33ec42107.png
Dnamic Setでグループで読んでAgeをデバック。
26f77bf316b2a85c5b5ee203dddc7ea4.png
マスターダイナミックのdebug modeにチェックを入れて
スライダーを0から動かすとdebugウインドウは以下のようなログが。
09fedaa51f7900700b35c549f1dfe902.png

t = 0  dt = 160
birth >> *Age = Frames=0 Ticks=0
t = 160  dt = 160
birth >> *Age = Frames=1 Ticks=0
t = 320  dt = 160
birth >> *Age = Frames=2 Ticks=0
t = 480  dt = 160
birth >> *Age = Frames=3 Ticks=0
t = 640  dt = 160
birth >> *Age = Frames=4 Ticks=0
t = 800  dt = 160
birth >> *Age = Frames=5 Ticks=0
t = 960  dt = 160
birth >> *Age = Frames=6 Ticks=0
t = 1120  dt = 160
birth >> *Age = Frames=7 Ticks=0
t = 1280  dt = 160
birth >> *Age = Frames=8 Ticks=0
t = 1440  dt = 160
birth >> *Age = Frames=9 Ticks=0
t = 1600  dt = 160
birth >> *Age = Frames=10 Ticks=0
t = 1760  dt = 160
birth >> *Age = Frames=11 Ticks=0
t = 1920  dt = 160
birth >> *Age = Frames=12 Ticks=0
t = 2080  dt = 160
birth >> *Age = Frames=13 Ticks=0
t = 2240  dt = 160
birth >> *Age = Frames=14 Ticks=0
t = 2400  dt = 160
birth >> *Age = Frames=15 Ticks=0
t = 2560  dt = 160
birth >> *Age = Frames=16 Ticks=0
t = 2720  dt = 160
birth >> *Age = Frames=17 Ticks=0
t = 2880  dt = 160
birth >> *Age = Frames=18 Ticks=0
t = 3040  dt = 160
birth >> *Age = Frames=19 Ticks=0
t = 3200  dt = 160
birth >> *Age = Frames=20 Ticks=0
t = 3360  dt = 160
birth >> *Age = Frames=21 Ticks=0
t = 3520  dt = 160
birth >> *Age = Frames=22 Ticks=0
t = 3680  dt = 160
birth >> *Age = Frames=23 Ticks=0
t = 3840  dt = 160
birth >> *Age = Frames=24 Ticks=0
t = 4000  dt = 160
birth >> *Age = Frames=25 Ticks=0
t = 4160  dt = 160
birth >> *Age = Frames=26 Ticks=0
t = 4320  dt = 160
birth >> *Age = Frames=27 Ticks=0
t = 4480  dt = 160
birth >> *Age = Frames=28 Ticks=0
t = 4640  dt = 160
birth >> *Age = Frames=29 Ticks=0
t = 4800  dt = 160
birth >> *Age = Frames=30 Ticks=0
t = 4960  dt = 160
birth >> *Age = Frames=31 Ticks=0
t = 5120  dt = 160
birth >> *Age = Frames=32 Ticks=0
t = 5280  dt = 160
birth >> *Age = Frames=33 Ticks=0
t = 5440  dt = 160
birth >> *Age = Frames=34 Ticks=0
t = 5600  dt = 160
birth >> *Age = Frames=35 Ticks=0
t = 5760  dt = 160
birth >> *Age = Frames=36 Ticks=0
t = 5920  dt = 160
birth >> *Age = Frames=37 Ticks=0
t = 6080  dt = 160
birth >> *Age = Frames=38 Ticks=0
t = 6240  dt = 160
birth >> *Age = Frames=39 Ticks=0
t = 6400  dt = 160
birth >> *Age = Frames=40 Ticks=0
t = 6560  dt = 160
birth >> *Age = Frames=41 Ticks=0
t = 6720  dt = 160
birth >> *Age = Frames=42 Ticks=0
t = 6880  dt = 160
birth >> *Age = Frames=43 Ticks=0
t = 7040  dt = 160
birth >> *Age = Frames=44 Ticks=0
t = 7200  dt = 160
birth >> *Age = Frames=45 Ticks=0
t = 7360  dt = 160
birth >> *Age = Frames=46 Ticks=0
t = 7520  dt = 160
birth >> *Age = Frames=47 Ticks=0
t = 7680  dt = 160
birth >> *Age = Frames=48 Ticks=0
t = 7840  dt = 160
birth >> *Age = Frames=49 Ticks=0
t = 8000  dt = 160
birth >> *Age = Frames=50 Ticks=0
t = 8160  dt = 160
birth >> *Age = Frames=51 Ticks=0
t = 8320  dt = 160
birth >> *Age = Frames=52 Ticks=0
t = 8480  dt = 160
birth >> *Age = Frames=53 Ticks=0
t = 8640  dt = 160
birth >> *Age = Frames=54 Ticks=0
t = 8800  dt = 160
birth >> *Age = Frames=55 Ticks=0
t = 8960  dt = 160
birth >> *Age = Frames=56 Ticks=0
t = 9120  dt = 160
birth >> *Age = Frames=57 Ticks=0
t = 9280  dt = 160
birth >> *Age = Frames=58 Ticks=0
t = 9440  dt = 160
birth >> *Age = Frames=59 Ticks=0
t = 9600  dt = 160
birth >> *Age = Frames=0 Ticks=-1
t = 9760  dt = 160
t = 9920  dt = 160
t = 10080  dt = 160
t = 10240  dt = 160
t = 10400  dt = 160
t = 10560  dt = 160
t = 10720  dt = 160
t = 10880  dt = 160
t = 11040  dt = 160
t = 11200  dt = 160

*Age = Frames=0から始まって
*Age = Frames=59まで上昇してその後は反応しなくなってます。
つまりAgeはlifeSpanの数字だけ0から1づつ上昇していき60回上昇したらパーティクルを消すということなんですね。

ここでバリエーションがからんでくると面倒ぽいのですが、たぶんその対策がノーマライズなんでしょう。ノーマライズの仕方は米岡さんの記事をみながらまた次回やります。

tP tutorials 5「ブラックボックスの作成と使用」

velocityで上に行くだけのspeedブラックボックスを作って。それを動いていないdraw particlesに適用するというもの。こうやって効果を保存して何度も使いまわすんだな。
例えばドットを飛ばすパーティクルに兆弾ブラックボックスを与えると障害物で跳ね返ったりスパークが起きたりとか出来るんだろうな。
パーティクルにナパーム弾ブラックボックスを加えたら、逃げ惑うベトコンを焼き尽くす事も出来るんだろう。予想だが。しかしこれでアセット化できそうなんでよさそうだ。