vfxvelocity

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

Thinking Particle 第6回 オブジェクトをパーティクル化してみて色々やってみよう~!

こんにちは、コンドウ タカシです。
今回は「オブジェクトをパーティクル化」してみて色々触ってみようと思います。
まず、適当なSphereを作って、横に移動する様にアニメーションを付けます。

次にTPを作り以下の感じでグループを作ります。

新しいDynamicSetを作り名称を「bornPrt」にします。
「bornPrt」DynamicSetのメインワイヤ設定ビュー内で右クリックして
「Operators」→「Generator」から「ObjToParticle」ノードを作ります。

ノードを選択してプロパティーから「Pick」ボタンをクリックしてSphereモデルを選択します。
また、「Group」から「activatePrt」に設定します。
次に「Instance Shape」にチェックして下さい。

タイムスライダーを動かしてみましょう。
すると、元のSphereモデルは移動しているのですが、パーティクル化したオブジェクトはその場に残されたままです。。。

再び、「ObjToParticle」ノードのプロパティを見直してみましょう。
お、、、
「Track」という項目がありますね~
ここが今だと「None」になっていますが、今度は「Object To Particle」にチェックを入れてみましょう。

すると、、、、
ちゃんとアニメーションしていることが確認出来ると思います。
このように、アニメーションしていないオブジェクトの場合は「None」で大丈夫ですが、
アニメーションしているオブジェクトは「Object To Particle」にチェックをしてあげる必要があります。
最後に元のオブジェクトも表示されている状になっているので、「Hide」ボタンを押して非表示にしてげます。

一旦ここで「Object To Particle」ノードをオフにするため、ノードを右クリックして「disable」をクリックします。
次に、boxオブジェクトを作って「rayfire」等で破片に割ってあげます。(個数として100個ぐらいですかね)

rayfireが無い場合
「Advanced Fragmenter」という無料で使えるスクリプトがあるので良かったら使ってみて下さい。
ここからダウンロードできます。

http://www.scriptspot.com/3ds-max/scripts/advanced-fragmenter

最初「ObjToParticle」ノードでSphereオブジェクトを選択しましたが、
こんな100個もあるオブジェクトをいちいち「Pick」ボタンで選択していると日が暮れます。(あと管理しづらいので)
なので、今度は違うノードをつかってオブジェクトをパーティクル化させていきます。
その前にまず、この100個の破片をレイヤーに入れてしまいましょう。名称は「fragment」にします。

再び「bornPrt」DynamicSet内で今度は「Operators」→「Generator」から「LayerToParticle」ノードを作ってあげます。

ノードを選択してプロパティーの「Group」を「red」に設定。
Layer Stringに先ほど破片を格納したレイヤー名(fragment)を入力します。
※もし何の名前か忘れてしまった場合は「*」を取り敢えず入力してみます。
すると全てのレイヤー名が表示されるので、これかな? って思うレイヤー名を選択します。

すると、

複数のオブジェクトを一括でレイヤー単位でパーティクル化させる事が出来ます。
では、一度オフにした「Object To Particle」ノードをオンにします。
同じように、ノード上で右クリックして「enable」でオンにする事が出来ますが、
DynamicSet上でオン/オフにしたいノードを右クリックすることによって簡単にオン/オフする事が出来ます。

作った、DynamicSetも同様にオン/オフする事が出来るので、便利です。
えっと、今2つのオブジェクト(Sphere)(Fragment)がパーティクル化されていると思います。

新しいDynamicSetを作って名称を「changeByDistance」にします。
その中に「PPass」ノードを作ってあげて「red」グループを選択します。
また、新しく「Operators」→「initiator」から「PSearch」ノードを選びます。
これは何なのかというとインプットに繋いであげた”Position”と指定したグループの関連性を見つけるノードで
アウトプットを”Nearest PID”にしてあげると「指定したパーティクルに近いパーティクルを探す」という意味になります。

上の図だと「red」グループの”Position”を「PSearch」ノードの”Position”のインプットに繋ぎます。
それで「PSearch」ノードのGroupでSphereのグループ(activatePrt)を選びます。次に「Radius」の項目で【20】を入れる事によって、
「red」グループに対して「activatePrt」グループの位置から20の距離にあるパーティクルを見つけるという意味になります。
それを「Group」ノードに繋げて「blue」にしてあげれば、、、

Sphereが通り過ぎた箇所が違うグループ「blue」になるようにする事が出来ます。
で、前回やったように「force」グループに対して重力が働くように設定すれば、


こんな感じに接触した箇所だけ重力が掛かって下に落ちるようになるわけです。
(でもめり込んでますよね(笑)、このあたりは次回直します。)

どうでしたでしょうか? TPはパーティクルとしてオブジェクトを扱うことが強みで特徴かと思います。
これをマスターすると崩壊系のエフェクトを作ることができるので、興味がある方は是非頑張ってみて下さい!
次回はこの続きをもうちょっと掘り下げてみたいと思います。

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

関連記事