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

記事の目次

    秋元純一 / Junichi Akimoto

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

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

    www.transistorstudio.co.jp

    カスタムForceで独自のParticleシミュレーションを作成

    今回もParticleのシミュレーションについて解説していきますが、特にフォーカスを当てたいのはForceのコントロールです。Particleの動きは、主にVelocityの更新によって決まります。このVelocityを更新する方法としては、Velocity自体を直接コントロールするか、またはForceを使ってコントロールする方法が一般的です。

    Houdiniには、あらかじめ多数のForceが用意されており、これらを利用することで多くの表現が可能になります。ただし、既存のForceだけでは、表現に制約があったり、コントロールが難しかったりする場合もあります。そのような場合、自分に合ったアプローチを実現するために、カスタマイズされたForceを作成することがHoudiniの強みです。特に、カスタムForceを作成することで、より精密なコントロールが可能になります。

    今回は、SOPとPOPを組み合わせて、新たなカスタムForceを活用し、独自の動きをもつParticleシミュレーションを作成していきたいと思います。

    今回のプロジェクトデータはこちらから>>

    01 All Flow / 全体のながれ

    ▲フロー全体図(※クリックで拡大)

    STEP 01

    まず始めにベースとなるジオメトリをインポートします【A】【1】

    このジオメトリに対して、VDB from Polygons SOP【B】を使ってSDFに変換します。またこのとき、Exterior Band Voxelsを広めに設定しておきます【2】。これは後にForceとして使用する際に判定する範囲を広く取りたいためなので、適宜調整してください【3】

    このSDFをVDB Analysis SOP【C】を使用してScalarからVectorへ変換し【4】、カスタムな名称に変更します【5】。これにより、Surfaceに向いたベクトルを作成することができます【6】

    STEP 02

    続いて、ベースのジオメトリに対して、VOP【D】を使ってAttributeを作成します。Noiseを2種類使用して【E】、Particleが発生する際のエリア【7】と、ForceをブレンドするためのAttribute【8】を作成します。

    STEP 03

    次に、DOP Network【F】を作成して、POPのフローを組んでいきます。このとき、POP Networkで作成すれば、あらかじめPOPの下準備がされたDOP Networkを作成することが可能です。

    POP Object DOP【G】とPOP Solver DOP【H】を作成して、シミュレーションの準備をします。POP Source DOP【I】を作成し、SOPで作成したSourceを選択します。

    次に、Emission AttributeにSOPで作成したAttributeを設定します。これにより、Noiseで作成した情報を基にParticleを発生させることができます。 必要に応じて、Groundplane DOPとStatic Solver DOP【J】を組み込み、床の衝突を追加します。

    続いて、大きな動きを作成するForceを追加します。

    POP Axis Force DOP【K】を作成します。このForceは、設定したエリアと軸に対して、回転を追加するForceになります。その後、POP Force DOP【L】を追加し、Noiseを追加します。それに対して、激しい動きを抑えるために、POP Drag POP【M】を追加します。

    最後に、カスタムメイドのForceを作成します。POP VOP【N】を使って、SOPで作成したSDFのFieldを読み込み【9】、それを利用したForceを作成します。

    VOPの内部では、Volume Sample VOP【O】とVolume Sample Vector VOP【P】を使用します。SDFのScalarではSurfaceからの距離を取得します。VectorからはSurfaceに対しての向きを取得します。

    Surfaceの距離をFit Range VOP【Q】でコントロールしていきます。最終的には、発生時にもって生まれたAttributeを読み込み【R】、VelocityとMix【S】をしてSurfaceに吸い付くようなForceとしてコントロールします【10】

    STEP 04

    シミュレーションのセットアップが完了したら、DOP Import Field SOP【T】を使って、Particleをインポートします。これに、File Cache SOP【U】を使ってキャッシュをとります。

    キャッシュを取ったParticleに対して、レンダリング用のAttributeを作成するためのVOP【V】を、サンプルとして作成してあります。このVOPでは"id"を使ってランダムな数値でParticleのスケールを設定したり、カラーを設定したりしています。

    本来レンダリング用の設定はレンダリングフローに合わせて調整する必要があるため、これが正式なアプローチではなく、あくまでもサンプルです【11】

    02 Hints / 制作に役立つヒント

    VOP Networkでのセッティング

    VOP NetworkをNetwork Viewで操作する際には、色々とカスタマイズした方が、ヒューマンエラーを回避できる可能性があります。これはある意味慣れや好みの問題が大きいので、あくまでも参考程度にしていただければと思います。

    VOP Networkでは、横軸のコネクションになると、VOPの数が多くなり、煩雑になる可能性が高いです。そのため、ネットワークのWireがノードに重なってしまい、非常に見づらいです。そのため、VOPだけは必ずWireをRoundにすることで、すっきりと整理することができます。これは、Network View Display Optionsで設定します【A】

    また、VOPノードを移動させる際に、Wireに対して自動的に接続されてしまい、思わぬエラーを引き起こすことが多々あります。これは[Network View→Tools→Allow Dropping Nodes on Wires]をOFFにすれば回避できます【B】。この機能は便利な反面、エラーの確率の方が高いため、筆者は必ずOFFにしています。

    03 Issues / 今回の課題

    Issue 01:Particleの分離 / Effect ★★☆☆☆

    おさらいとして、Particleの分離をしてみましょう。

    衝突したParticleが分離するような設定を作成してみましょう。グループのタイミングと分離のタイミングが重要です。

    Issue 02:Velocityのコントロール / Effect ★★☆☆☆

    Particleの動きを、Source側でVelocityを作成しコントロールをしてみましょう。

    Issue 03:Surfaceに沿わせる / Effect ★★★☆☆

    今回のテーマをおさらいして、球体の周りを這うラインエフェクトを作成してみましょう。

    こちらの制作例は、今回のプロジェクトデータ内に用意しています。ひととおり制作できたら、ぜひ確認してみてください。

    今回のプロジェクトデータはこちらから>>

    TEXT_秋元純一 / Junichi Akimoto
    EDIT_小村仁美 / Hitomi Komura(CGWORLD)