>   >  Houdini Cook Book:Vol.106 FLIP Buoyancy
Vol.106 FLIP Buoyancy

Vol.106 FLIP Buoyancy

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の密度の違いを表現したシミュレーションにチャレンジしたいと思います。前回は粘性の混在をシミュレーションしましたが、今回は密度を混在させて、どのような挙動をするのか検証したいと思います。

液体の密度は、いわゆる比重に直結するため、その際に浮力に差が生じます。これを利用することで、水と油のような、分離する様子を表現することができます。今回は、もう少しシンプルに、水と空気くらいの密度の差を作って、まるで泡が作られていくようなシミュレーションにしたいと思います。

ただ、まじめにやると非常に表現が難しいモチーフではあるので、今回は挙動がわかりやすい状態でお見せしていきます。今回のように密度に差をもたせるアプローチがわかれば、今後応用として、空気の層との摩擦などをシミュレーションに採り入れ、もう少し巨大な水の挙動も表現できたりします。

Houdiniでは非圧縮の空気はシミュレーションできるようになりましたが、空間にある空気層との摩擦などは自動的にシミュレーションできません。ただ、密度の違いを採り入れることで、そういった表現も可能になるので、ぜひ今回のアプローチを足がかりにしていただければと思います。

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

01 Source Setup

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

今回のシミュレーションは、コリジョン内部にFLIPで液体を貯めていくしくみを作成します。湧き出すような雰囲気にしたいので、簡単に溜まっていくように、あらかじめベースとなるエリアを指定します。

まず、コリジョンの形状となるジオメトリを読み込み配置します【A】。これをRemesh SOP【B】を使ってある程度均一なPolygonに変換し【1】、これをClip SOP【C】でカットして、Poly Fill SOP【D】で閉じます【2】。これをVDBへ変換して、少しだけ細らせておきます【E】【3】

このVDBからFLIP Source SOP【F】で、ベースとなるPointとVolumeを作成します【4】

このPointに対して、密度のちがいを決めるためのエリアを指定します。この作業にはVOP【G】などを用いて、Noise【H】を使って値を二値化【I】します【5】

また、初期速度をPoint Velocity SOP【J】を使って、上方向と、Noiseによって、湧き出すような勢いを追加します【6】。これでソースジオメトリの完成です。最後に、ベースのジオメトリをVDB【K】へ変換してCollisionのVolumeとします【7】

02 Sim Flow

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


続いてシミュレーションの解説です。まず、コリジョンを設定します。Ground Plane DOP【A】を用いて地面を作成します。次にStatic Object DOP【B】でSOPからコリジョンジオメトリを読み込みます。これはVolume Sampleを用いて、Invert Sign【1】を使って反転して使用します。

次にFLIP Object DOP【C】を作成します。次にVolume Source DOP【D】でソースのPointを読み込みます。この際、Life Expectancyの設定【2】と、Kill Inside SOPの設定【3】をします。Kill Inside SOPの設定は、湧き出すようなシチュエーションの際に役立ちます。

その後、FLIP Solver DOP【E】で、Volume MotionからDensityをAttibuteで制御できるように設定します【4】。また、Particle Motionでは、Collision Detection【5】とAge Particle【6】を設定します。今回は比重が時間で変化するように設定したいので、ParticleにAgeをもたせて処理します。

そうして、比重を変化させる為にSOP Solver DOP【F】を使用して、時間変化をシミュレーションします。SOPで設定した比重のエリアAttibuteを用いてGroupを作り、それによってParticleを切り分けます【G】。次に、Wrangle【H】で、AgeとRampを用いて時間変化を構築します【7】。もし、寿命でParticleを消したい場合は、【I】のようにWrangleでAttributeを制御して、Delete SOPで自動的に消失させるしくみを採り入れます。

最後に、比重が変わらないエリアにもベースのDensityを設定して完了です【J】。また、デフォルトでは、ParticleはVelocityのSpeedが可視化されますが、今回のような場合は、Densityに可視化の設定を変えることで、一目瞭然になります【8】

次ページ:
03 Cache Flow

その他の連載