今回は前回のValue To timeの応用をやってみたいと思います。実はこのValue To timeはパーティクルのパーティクルエイジだけでなくその他色々なデータを元にしてもタイムラインを作ってパーティクルの挙動をコントロールできます。この感覚が理解できればかなりのTPのポテンシャルを引き出すことができるようになります。
今回はこのムービーのようにライトの強度のデータを基にしてValue To Timeのタイムラインを作ります。やり方は殆ど同じです。
追記:サンプルファイル公開しました。下記のリンクからDLしてください。
http://dl.dropbox.com/u/5968011/ValueToTimeExample_LightIntensity.zip
今回のシーンでは板ポリから発生させたパーティクルに上からスポットライトを当てています。スポットライトにはフォールオフがかかっていて中心から外側にかけて強度が弱まっています。この強度の情報を使ってパーティクルの回転を制御します。
まずパーティクルを板ポリから発生させます。nodeヘルパーで板ポリオブジェクトをピックし、それをSurface PositionヘルパーのnodeインプットにコネクトしSurface PosヘルパーのpositionアウトプットとPositionBornのインプットに繋いで板ポリオブジェクトのサーフェイス上のポジションへパーティクルをセットします。今回は板ポリオブジェクトは70×40のセグメントを持っていて、そのセグメントのバーテックス上にパーティクルが来るようにSurface Pos のvertexにチェックを入れます。パーティクルのグループはplaneです。

次にこのplaneパーティクルにマテリアルとcubeのシェイプを与えて適当な大きさになるようにスケールをかけます。

さて次にライトの強度をValue To Timeに取り込みます。各パーティクルが受けているライトの情報をチェックするにはLight condition nodeを使います。パーティクルグループからPositionアウトプットを出しLight condition nodeのPositionインプットに繋ぎます。これでLight condition nodeがパーティクルの位置を知ることができるようになりました。これでどの位置のパーティクルはどれくらいの強度のライトを受けているという判断ができるようになります。ちなみに今回のライトの強度は0.1です。勿論1でも2でも状況に合わせて変えてOKです。これでパーティクルは最大で0.1、最低で0の強度のライトを受けることになります。
次にLight condition nodeのintensityアウトプットをValue To timeのValueインプットに繋ぎます。Value To Timeは最低で0、最高で0.1の値を受け取るのでValue1は0、value2は0.1に設定し、パーティクルのタイムラインの設定は今回も0から60とします。これでライトの強度を基にしたタイムラインができました。
次にfloat ヘルパーにキーフレームをつけて、ライトの強度のvalueがいくらの時にどれくらいパーティクルが回転するのかを決定します。そこで決定された値をvalueアウトプットで出力しAlignmentノードのXRotationインプットに繋いであげます。回転の基準は色々選択できますが今回はNoneでいきます。P AxisはZで。これでライトの強度に基づいてパーティクルが回転するようになりました。ライトの強度が0の時は回転は0°、0.1の時は164°回転します。

以上がValue To Timeの応用です。パーティクルエイジのような時間軸をもつパラメーターではないのにValue To Timeのタイムラインとして使うというのは最初は慣れないかもですが、これになれると一気にパーティクルのコントロールの幅が広がります。パーティクルエイジだけしか使わないのと比べて、他のSize,Velocity,color,distance,Spin,Mass,Scale等など恐らく数十倍のポテンシャルを引き出すことができるはずです。今後はまた別の回にてValue To Timeの応用例とその他の重要事項の説明をしていこうと思います。