_581x100.png CGsyomei_583x102.gif 訪問者 無料カウンター ページビュー 無料カウンター

2011年11月25日

(TP Basic)Value To Timeの基本

今回はValue To Timeヘルパーオペレーターの説明をします。これはcebasのヘルプによると”The Value To Time Helper gives you the ability to take any scalar value and turn it into a time value. ”とあり、つまり「Value To Timeヘルパーはスカラー値を時間値に置き換えることができる」そうです。なんのことか訳分からないですよね。結論から言うと、このヘルプを読んだだけでは絶対Value To Timeを理解するのは無理です^^;でもこれを理解すればTPがいかに強力かがよく分かるようになります。 ではValue To Timeはどういう局面で使うのかと言うと、「パーティクルが持つエイジやスピードなどの変化の情報を元にその他のサイズなどの要素をアニメーションさせる」時に使います。これだけでも説明不足なので実際の例を見てみましょう。

 それでは、パーティクルエイジが増えるに従ってサイズが大きくなるというシンプルなシーンで見てみます。今回パーティクルのライフスパンは60です。単純にパーティクルエイジの増加でサイズを大きくするだけなら以下のセッティングでOKです。元のパーティクルのサイズが1なのでエイジが2の時に2、3の時に3という風にサイズが増加していきます。ちなみにscaleの手前にあるfloatヘルパーは1,2,3と増えていくサイズに常に0.1倍してサイズを調整するためのものです。Addedは単純にValueの値を加算し、Multiplyは積算します。こうしたfloatノードを使ってパラメーターの値をコントロールする技も基本中の基本なので覚えておきましょう。

ValueToTimeBasic_01.jpg

 では次にパーティクルエイジが増えるに従って拡大縮小を繰り返すようにして欲しいとオーダーされたとしましょう。こういった場合にValue To Timeを使うのがベストです。ちなみにValue To Timeは「個別のパーティクルに固有のタイムラインを持たせる」機能だと思ってください。これは以下の図のようなものと考えてください。これらのタイムラインは、一番下の元もとのMAXのタイムラインとは独立していることに注意です。この独自のValue To Timeのタイムラインはパーティクルが発生した時やグループが切り替わった時にスタートすると考えましょう。そしてこのパーティクルに特有のタイムラインを元に、後でfloatヘルパーの値をアニメーションさせてパーティクルの拡大縮小をコントロールすることになります。

ValueToTimeBasic_02.jpg

 とりあえずはこのフローの説明をします。最初のBornダイナミクスではPosition Bornでシンプルにパーティクルを発生させています。次にprtパーティクルグループからAgeをアウトプットしてValue To TimeのValueインプットに繋ぐことでValue To Timeがどの要素を参照するのかを判定します。ロールアウトメニューの中を見てみましょう。Value1はvalueインプットが受け取る一番小さい値を設定するパラメーターです。今回の場合はパーティクルエイジは0から始まるので0にします。time1とは、value1に値が入った時に設定されるtimeの値です。今回の場合value1には0が入った時にtimeは0からスタートすることになります。value2はパーティクルが消えるライフスパンである60を受け取るようにします。その時にtime2には60を指定するとします。(これは別に20でも30でも構いません。)これによってprtグループのパーティクルは0フレームから60フレームまでの個別のタイムラインを持つようになりました。(しつこいようですが、このタイムラインはパーティクルが発生した時、もしくはグループが切り替わった時にスタートするものです。)エイジのvalueが0の時はtimeは0エイジが30の時は30の、エイジが60の時は60の値を持つことになります。

ValueToTimeBasic_03.2

ValueToTimeBasic_03.jpg

 次にこのタイムラインを元にfloatヘルパーノードを使ってアニメーションをつけます。floatノードもtimeインプットがありここからValue To Timeでできたタイムラインの情報を受け取ることができます。floatノードのvalueパラメーターに以下のようにキーフレームを打ってみます。そしてvalueアウトプットをscaleノードに繋ぎます。

ValueToTimeBasic_04.jpg


 ここでアニメーションを再生してみるとパーティクルがfloatノードにつけたキーフレームアニメーションに沿った拡大縮小のアニメーションをしているのが分かります。これがValue To Timeの使い方の基本です。



 あと少し補足ですが、こういうパーティクルエイジとValue To Timeを組み合わせるときに有効なTipsを紹介しておきます。今回のケースでは全てのパーティクルのライフスパンが60です。これにライフスパンのバリエーションが加わってそれぞれ寿命が異なっても同じサイクルの拡大縮小をさせたいときはどうするのでしょうか。

 こういう時は「ライフスパンのノーマライズ」というテクニックを使います。ライフスパンのノーマライズとは「パーティクルエイジ÷ライフスパン」の計算をして0から1の結果を求めることです。例えばライフスパンが30フレのパーティクルがあるとします。発生直後のパーティクルはエイジが0なので0÷30で0、エイジが1のパーティクルは1÷30で0.3333、エイジが2のときは0.06666と続き最後にエイジが30の時に30÷30で1になります。こういう計算はAdd&Multiplyヘルパーノードを使います。以下の図のようにValueBにLife Spanアウトプットを、ValueAにAgeをコネクトします。そしてロールアウトメニュー内のA/Bにチェックを入れます。これでパーティクルエイジ÷ライフスパンの計算ができます。そしてそこから出された計算結果をValue To Timeに送ります。Add&Multiplyから出力される値は常に0から1なのでValue1には0をValue2には1を設定します。後は先ほど使ったfloatノードのアニメーションを再利用します。タイムスライダーを動かしてみると、ライフスパンの長いパーティクルはゆっくり拡大縮小を繰り返し、短いライフスパンのパーティクルは速く拡大縮小を繰り返しているのが分かります。ライフスパンをノーマライズしていない方と比較してみると結果は一目瞭然ですね。



 このライフスパンをノーマライズするテクニックは色んな局面で出てくると思います。非常に重要なのでぜひ覚えておきましょう。
 
 


 
posted by けゑ at 07:05| Comment(0) | TrackBack(0) | Thinking Particles
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/50942682

この記事へのトラックバック