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回上昇したらパーティクルを消すということなんですね。

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