トランジスタスタジオ・秋元純一氏によるHoudini連載「Houdini Cook Book Entry」。Houdiniをより基礎の部分から解説し、最後にはふり返りとして課題も用意しています。第7回はParticleの基本フローについて解説します。
秋元純一 / Junichi Akimoto
株式会社トランジスタ・スタジオ/取締役副社長
2006年に株式会社トランジスタ・スタジオ入社。日本でも指折りのHoudiniアーティスト。手がけてきた作品は数々の賞を受賞している
シンプルだが奥深いParticle
今回は、もともと大昔にはHoudiniの代名詞だったParticle、いわゆるPOPと呼ばれるものですが、その基本的なフローを解説していきたいと思います。
昨今、FluidやRBDなど、リアリスティックなエフェクトが求められることが多く、どちらかと言うとシンプルになりつつあるParticleは、なかなか鳴りを潜めることが多いように感じています。ただ、シチュエーションによっては、やはり必須になることもあり、単純なシミュレーションではありますが、格好良くコントロールするのは、なかなかに骨の折れるところでもあります。
他のシミュレーションと比べると、割と軽快にテイクを重ねることも可能なほど軽いシミュレーションにはなりますが、それもフローによっては、相当に複雑なフローを組む必要もあり、実は結構奥が深いのです。単純だからこそ、ちょっとした工夫をしないと安っぽくもなってしまいますが、逆に言えば、コントロールや見せ方次第では非常に格好良くもできるのが、Particleの魅力とも言えるでしょう。
01 All Flow / 全体のながれ
STEP 01
今回は、スパークをParticleで表現してみたいと思います。まず、何もない空間だと寂しいので、Particleが衝突するためのCollisionをインポートし【A】【1】、そのPolygonが重いようならPoly Reduce SOP【B】でリダクションします【2】。
次に、簡単な発生場所を作成していきます【C】【3】。
STEP 02
続いて、DOP Network【D】を作成します。Particleなどのシミュレーションは、必ずこのDOP Networkで毎フレーム更新するようなしくみが必要になってきます。
今後シミュレーションの解説をする際には、必ず登場します。以前解説したSolver SOPも、このDOP Networkが内部に組み込まれたものです。
STEP 03
DOP Networkの中に、まずCollisionとなる地面【E】とジオメトリをStatic Object DOP【F】で取り込みます。Static Solver DOP【G】も作成し、このフローをもって衝突判定のObjectとします。
続いて、POP Object DOP【H】を作成し、POP Solver DOP【I】に接続します。このPOPのフローとCollisionのフローをMerge DOP【J】でまとめます。
このとき、通常は左側がより重いものにするようにしましょう。これは、Relationshipと言われる部分に関わってきますが、非常に難易度の高い部分なので、今は簡単に、“重いものが左”とだけ覚えておくと便利です。
STEP 04
次に、Particleを発生させるために、POP Source DOP【K】を作成します。このPOP Source DOPに、SOPで作成したSourceを読み込みます。
その後、BirthのImpulse Countへ、毎フレームランダムな数値で発生するようにExpressionを組みます【4】。また、AttributeのInitial VelocityをAdd Inherited Velocityに設定し、ランダムに放射状に広がるように設定します。これで、最初のきっかけとなるParticleが発生できるようになりました【5】。
STEP 05
このParticleをPOP Group DOP【L】を使って、ランダムなチャンスで選択してグループに入れるように設定します。このParameterでは、80%の確率でグループに入れ込まれるようになります【6】。
STEP 06
続いて、POP Replicate DOP【M】を使って、作成したグループを利用して【7】、放射状にParticleを分裂させます【8】。また、分裂する数も、ランダムな数値になる様にExpressionを組みます【9】。同様に、Lifeにも組み込みます【10】。
STEP 07
重力に対しPOP Fource DOP【N】を使って、Yのマイナス方向へ力をかけます。次に、POP Collision Behavior DOP【O】を使って、Collisionに衝突した際に、グループに入れ込むように設定します【11】【12】。
最初の分裂と同様に、POP Replicate DOP【P】をもうひとつ組み込み、衝突のグループを使って分裂をかけて完了です【13】。
02 Hints / 制作に役立つヒント
DOP Networkでのコネクションの順番
今回のPOPのフローは【A】のようなコネクションになっています。ただ、シミュレーションのストーリーを考えると、【B】のようなながれでも良いのでは?とも思えます。もちろん、【B】でもシミュレーションにエラーが出るわけではないのですが、よく見ると結果が思ったようにならないかと思います。
これは、Dopnetworkの特性を詳しく追い込んでいくと納得できるものですが、実はそれには高度な基礎知識が必要になります。Sourceから発生させていくながれと、力であるForce、衝突判定、それぞれを別のフローとしてMergeでまとめる方が安定したフローになります。この部分を詳しく解説したいのですが、それには他にも解説しなくてはいけない多くの事柄があり、ここで解説しきることが難しいのです……。
ただ、ヒントとしてこう言ったポイントを取り上げることで、実際につなぎ方を変えた場合にどういったちがいがあるのかを、自身で確認してもらえる機会になると考え、あえて提案をしてみました。ぜひ、つなぎ方を変えた場合のその差異を自身で確認してもらって、まずは体感としてフローを覚えるのが一番良いと考えます。
03 Issues / 今回の課題
Issue 01:ParticleのLifeとAge / Effect ★☆☆☆☆
ParticleのLifeとAgeを利用して、色を時間軸で変更するための計算をしてみよう。このアプローチは、応用も含めてかなり有効活用できるので、ぜひチャレンジしてみてください。
Issue 02:ParticleのTrail / Effect ★★☆☆☆
ParticleをParticle Trail SOPを使わずに軌道を作成し、それを利用してプロシージャルモデリングをしてみよう。 このアプローチもかなり重要な引き出しになるはず。
こちらの制作例は、今回のプロジェクトデータ内に用意しています。ひととおり制作できたら、ぜひ確認してみてください。
今回のプロジェクトデータはこちらから>>TEXT_秋元純一 / Junichi Akimoto
EDIT_小村仁美 / Hitomi Komura(CGWORLD)