vfxvelocity

VFXエフェクトのトピックス、CG最新情報を発信していきます

Thinking Particle 第5回 色んなコンディションで切り替えてみよう~!

こんにちは、コンドウ タカシです。
やって来ました! 2018年! 平成が30年なので覚えやすいですね。
今日のTP解説は「コンディション(条件)」についてです。
前回の「Thinking Particle 第4回 グループの階層(ヒエラルキー)ってなんなのさ!」で少し紹介させてもらいましたが
「Particle Age」ノードがコンディション系のノードになります。
このコンディション系のノードによってAのグループをBのグループに色々な条件によって切り替える事が出来るので、
TPの真骨頂的な機能だったりします。(めっちゃ重要!!)
今回は僕がよく使っているコンディションノードを紹介出来たらなーと思います。

ではやっていきましょう。

まず下準備です。いつもと同じようにグループ「red」「blue」を作って、更に「force」グループを作り「blue」グループを「force」の子供にします。

次に、DynamicSetビューで新しくDynamicSet(名称はbornPrt)を作って
「Positionborn」ノードを作ってあげます。

パラメーターは以下の様に設定します。(数「Count」を増やしたのと、速度とバリエーションを変更したぐらいです)
あと割り当てのグループを「red」にします。

これで、放射状に広がるパーティクルが出来ました。
また、新しくDynamicSet (名称はforce)を作って「force」グループに対して重力が働く様に設定していきます。

さて! 下準備はOKです!
コンディションノードについて解説していきます。
まず、

「パーティクルの寿命によってグループを切り替えたい!」
ちょっと前回のおさらいになりますが「ParticleAge」ノードを使って「red」グループから「blue」グループに切り替えています。
particleAgeノードのパラメータを見るとRelative の「Time1」が50、「Time2」が100になっています。
これはどういう意味かというと、寿命(ここだと30フレーム)が50%経過(つまり15フレーム)から100%(30フレームですね)のパーティクルが対象になります。
なので、「Group」ノードのONに繋がっているパーティクルは15フレーム以降のパーティクルが「blue」のグループに切り替わるという事になります。

ビューポートで見るとこんな感じです。中心から放射状に赤いパーティクルが飛んでいるのですが、15フレームから青色に変わっています。
また、「Invert(反転)」ノードを使うことにより、最初「red」グループだったパーティクルを「blue」グループにして、
それをまた途中から「red」グループに戻す事もする事が出来ます。
この例だと「Particle Age」ノードの Relative のTime1が50、Time2が80の時に「blue」グループに切り替わり、それ以外は「red」グループ
つまり寿命が30フレームなので、50%=15フレーム~80%=24フレームが「blue」グループ、0%=0フレーム~49%=14フレーム及び81%=25フレーム~100%=30フレームが「red」グループになるという事になります。

ビューポートで見るとこんな感じです。

「パーティクルがオブジェクトの中に入ったらグループを切り替えたい!」
ここでは「InMesh」ノードを使っています。この「InMesh」ノードってのは何かというと”指定したオブジェクト”の中に入ったパーティクルが対象になるノードで
「Node」ノードで球体を選択して、それを「InMesh」ノードの”Node”インプットに、”Position”インプットには「red」グループを繋げる必要があります。

ビューポートで見るとこんな感じです。黒い球体の中に入ったパーティクルが青色に変わっている事が分かると思います。

「速度がある一定を超えると違うグループに切り替えたい!」
個人的に一番よく使うコンディションノードじゃないかと思うほど使いまくっている「Threshold」ノード
ここだと「red」グループのアウトプットの”Velocity(速度)”を「Threshold(しきい値)」ノードの”Value”インプットに繋げています。
このVelocityとは「方向と速度をあわせて持っている要素」の事ですが、Threshold」ノードのパラメータ”Threshold1″が0、”Threshold2″が80で”Inside(以内)”にチェックが入っています。
つまり、パーティクルが飛んでいく速度が0~80以内の場合「blue」のグループに切り替わるという事になります。
最初「Positionborn」ノードで速度を100でバラツキを30%にしました。なので70~100の速度でパーティクルが飛んでいる事になっています。

ちょっと見づらいですが、遅い速度のパーティクルは青いパーティクルに切り替わっています。

「Threshold」ノードですが、速度だけではなく「大きさ」や「位置」、「回転」「距離」等、いろいろな値をサポートしているので、大変便利です!

「2つの距離が近くなったら違うグループに切り替えたい!」
ここでは「Distance」ノードと先ほど紹介した「Threshold」ノードを使用しています。
この「Distance」ノードというのは指定した位置の距離を取得するノードで”Position1”に「Node」ノードで選択した球体の位置、”Position2”に「red」グループの位置をインプットに繋げてあげることによって
2つの間の距離を出すことが出来ます。で、同じく「Distance」ノードのアウトプット”Distance”にその距離が出てくるので、それを「Threshold」のインプット”Value”に繋ぎます。
パラメーターの”Threshold1″には0 ”Threshold2″には50 でInside(以内)にチェックが入っているので
要するに球体の位置から半径50以内の距離にあるパーティクルが「blue」グループに切り替わるという事になります。

どうでしたでしょうか? いろんな制御方法があってTPの面白さを分かってもらえれば嬉しいです。
半自動でパーティクルを制御するためには、こうしたコンディションノードを活用してあげることが絶対不可欠なので是非覚えてくださいね。
次回はオブジェクトをパーティクルとして扱う方法について説明していこうと思います。

PS:「ここをこうしたら良いんじゃない?」とかご意見、ご感想はツイッターで頂けると幸いです。

関連記事