トランジスタスタジオ・秋元純一氏によるHoudini連載「Houdini Cook Book Entry」。Houdiniをより基礎の部分から解説し、最後にはふり返りとして課題も用意しています。第7回はParticleの基本フローについて解説します。

記事の目次

    秋元純一 / Junichi Akimoto

    株式会社トランジスタ・スタジオ/取締役副社長

    2006年に株式会社トランジスタ・スタジオ入社。日本でも指折りのHoudiniアーティスト。手がけてきた作品は数々の賞を受賞している

    www.transistorstudio.co.jp

    シンプルだが奥深い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)