記事の目次

    FLIPの粘性を利用したシミュレーションをご紹介します。

    TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
    日本でも指折りのHoudini アーティスト。
    手がけてきた作品は数々の賞を受賞している。
    代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
    www.transistorstudio.co.jp
    blog.junichiakimoto.com


    EDIT_小村仁美 / Hitomi Komura(CGWORLD)

    ●CGWORLD Online Tutorialsにて特別無料配信中!
    【無料】Houdini COOKBOOK +ACADEMY 特別編 ~コロナをやっつけよう!~

    粘性の混在

    今回は、FLIPの粘性のちがいを表現するシミュレーションにチャレンジしていきたいと思います。FLIPの粘性をAttributeでコントロールできることは以前の記事でも紹介しましたが、今回はさらに応用的な使用方法になります。

    粘性を直接コントロールするというより温度を利用して粘性を変化させるというやり方にはなりますが、温度そのものを利用したいわけではなく、それぞれちがいのある粘性の橋渡しとして利用していくアプローチです。この橋渡し役は当然温度である必要はないのですが、デフォルトの機能を活用することで、ある程度セットアップを簡略化しています。

    このような考え方は、Houdiniを使用する上では非常に重要なので、頭を柔らかくして固定観念に囚われないセットアップを目指しましょう。

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

    01 Source Setup

    ソースのセットアップを解説します。


    今回のシミュレーションでは、泥を水で溶かす、洗い流すような表現にチャレンジしていきます。まず、FLIPのシミュレーション用にソースの作成を行います。インポートしたジオメトリのサーフェスに対して、OpenVDBを使い、SDFへ変換し外側へ太らせます【A】【1】。地面との接地面だけをさらに太らせたいので、その部分だけ抜き出してVDB Combine SOPで合わせてVDB Smooth SDF SOPで滑らかにし、一度Polygonに変換します【B】。VOP【C】を使ってNoise Deformをかけます【2】

    最終的には地面にめり込んでいる部分を引いて【D】、内部を元の形状でくり抜いておきます【E】【3】。このSDFから、Point from Volume SOP【F】を使ってPointを生成します。これが、泥のベースになります【4】

    このPointに対して必要なAttributeを作成します【G】

    次に、水のエミッタの準備です。ソースになる球体を準備します【H】。これに対して、FLIP Source SOP【I】を使ってエミットの準備をします。このソースに対して、必要なAttributeを作成します【J】。さらに、水の発生にムラをもたせるために、Point Velocity SOP【K】を使ってVelocityにNoiseを追加します【5】

    【G】【J】で追加したAttributeは、それぞれ異なる値にしています。泥の方は、初期の粘性が高く、温度をもっておらず、比重が重いものになっています。逆に、水の方は粘性が低く、温度をもち、比重は通常の値となっています。このように異なった値を、温度のちがいを使って橋渡しすることで、粘性や比重を混ぜ合わせていくようなシミュレーションをセットアップしていきます。

    このソースには動きをもたせたいため、Motion FXを利用してアニメーションを追加します【L】。Motion FXはCHOP【6】を使った構造になっていて、Transform SOPのParameterに自動的にChannelを追加してくれます【7】

    Collisionの準備もしておきましょう。精度を求めたい場合は、SDFを用いてVolume SampleでCollisionを作ることも手のひとつですが、今回は速度優先でPolygonをリダクションし【M】、それをCollisionとしています。

    02 Sim Flow

    シミュレーションのフローを解説します。


    シミュレーションのセットアップをします。まず、CollisionとなるGround Plane【A】とStatic Object【B】を準備します。

    続いて、FLIP Object DOP【C】を作成します。このObjectのInitial Dataに、泥のソースPointを読み込みます【1】。次に、Volume Source DOP【D】を使って、水のエミッタを読み込みます。

    FLIP Solver DOP【E】を作成し、Viscosity【2】とDensity【3】をAttributeから計算するためのセットアップをしておきます。今回のシミュレーションの要となる設定は、Gas Temperature Update DOP【F】を使用して解決します。

    このMicro Solverは、Temperature情報を更新するとともに、付随するViscosity【4】およびDensity【5】の値も更新してくれます。要は、Temperatureの拡散【6】を泥に対する水の浸透として置き換えるようなアプローチと言えます。固まっている泥が、水の浸透によって溶け出していくようなシミュレーションを行なっているのです。

    あくまでもフェイクのシミュレーションではありますが、比較的シンプルに再現することができました。本来は溶岩などの表現に用いられるものですが、熱をあくまでも値をミックスするためのブリッジに使用して、熱の拡散を浸透に置き換えれば、今回のような表現も可能です。また、Cooling【7】を設定することで、浸透が落ち着いてまた固まっていくような様子もシミュレーション可能です。

    また、シミュレーションの際に、Visualizationの設定にあるAttribute【8】を変更するとそれぞれの特性が確認できるため、パラメータ調整の役に立つと思います。画像はtemperature【9】、viscosity【10】、density【11】に変更した様子です。

    次ページ:
    03 Operator

    [[SplitPage]]

    03 Operator

    主要ノードを解説します。

    ●Gas Temperature Update DOP

    今回紹介するノードは、Gas Temperature Update DOPです。

    このノードは、FLIPにもたせた温度を使って粘性や密度を変更できるオペレータです。また、温度は、時間経過で冷却したり、拡散することが可能です。

    Coolingは、温度の冷却率を設定できます。流体表面と流体内部の冷却率をそれぞれFalloff Distanceで切り分けて設定することが可能です。

    Temperature Diffusionは、時間経過による温度の拡散を設定できます。RadiusはWorldのUnitに対する拡散半径で、その範囲で拡散しようとします。また、HeatとColdのBiasは、それぞれ高温と低温の領域からお互いに広がる比率になります。今回は同じ比率にしていますが、熱伝導の具合はここで調整できます。

    Temperature To Viscosityは、今回のシミュレーションの要といえる設定です。粘度を温度に結び付けて変動します。高温の場合、粘度は低く、逆に低温になるほど粘度が高くなっていくような設定になっています。

    Densityは温度と密度を結び付けてシミュレーションします。今回のシチュエーションでは目に見えて効いてはいませんが、水より泥の方が比重が高ければ、仮に溜まるようなCollisionがあった場合には効いてくると考えられます。


    • 「Houdini COOKBOOK +ACADEMY」
      Houdiniを基礎から楽しく学ぶオンライン講座

      公開日程:毎週金曜日公開(予定)
      価格:1,300円(税込)※セットでの割引販売有
      ※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
      受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など
      cgworld.jp/special/houdinicookbookacademy