>   >  Houdini Cook Book:Vol. 104 Melt FLIP
Vol. 104 Melt FLIP

Vol. 104 Melt FLIP

熱によるFLIPの粘性を操作します。

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


EDIT_小村仁美 / Hitomi Komura(CGWORLD)

FLIPのAttirbuteを操作する

今回はFLIPのAttributeを操作する方法を探っていきたいと思います。数年前に同じようなアプローチを紹介したことがあるのですが、そこからHoudiniのバージョンが変わり一新された部分もあるので、改めてお話します。

今回は、熱源から受け取った情報を基に粘性を変更していくような方法論を解説していきたいと思います。Viscosityを利用することで、FLIPは液体に粘性をもたせることができます。簡単な設定をするだけでトロっとした表現があらかじめ可能になっていますが、今回はそう言った元々用意されているものだけではなく、Micro Solverを使ったアプローチを検証していきます。Micro Solverの扱いは慣れるまでは難しい部分もありますが、慣れれば便利なものも多く、シミュレーションのバリエーションを増やすことができます。近年は、Viscosityを扱うためのHDAやシェルフが多く用意されており、ある程度気軽に扱うことができるようになりました。今回のアプローチでさらに引き出しを増やしていただければと思います。

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

01 Source Setup

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


まず、FLIPのシミュレーション用にソースの作成を行います。インポートしたジオメトリのサーフェスに対して、Scatter SOPでPointを散布します【A】。今回は、大小のバリエーションを付けるために、あえて2つに分けています。それらにそれぞれAttribute Randomize SOP【B】を使って、ランダムな大きさの"pscale"を作成します。また、同じくAttribute Randomize SOP【C】で"N"をランダムな方向で作成します。このとき、正負両側に法線が向くように設定します【1】【2】

これらのPointにCopy SOP【D】を使ってBoxをコピーします【3】。法線をランダムにすることで、回転をかけなくてもばらばらの方向でコピーすることが可能です。次に、これらのジオメトリと元のジオメトリをMergeして、VDB from Polygons SOP【E】を使ってVDBに変換し、形状を整えPolygonへ変換します【4】

これをPoint from Volume SOP【F】でPointに変換します。このとき、Point SeperationはFLIPのParticle Seperationと同等になるようにします【5】。これらのPointに対して、ソースに必要なAttributeを追加します【G】。今回は、あらかじめ3つのAttributeを用意しました【6】。"viscosity"はDOP内で付与することもできます。"reaction"は、熱源から移す際の移り具合になりますが、例えば、ノイズなどを使って、場所によって移り方に差をつけることも可能です。このように、あらかじめAttributeをSOPで用意することは、シミュレーションにディテールを与える意味でも重要なパートになります。

次に、熱源を作ります。これはどんな形状でも良いのですが、今回は棒状【H】のものでカットするようなイメージにしています。これに対して、VolumeからPointを作成し【I】、"heat"のAttributeを追加します【J】。これをアニメーション【K】させれば熱源の完成です【7】。続いて、実際のジオメトリとCollision用のSDF【L】を用意します。これらは、アニメーションをした際のTransform SOPをReference Copyして同じ動きをするようにしておきます【M】。今回は、解説しやすいようこのような設定にしていますが、アニメーションをGeometryのTransformで行う方が効率は良いです。また、スピードという点でも有利になります。

02 Sim Flow

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


シミュレーションのセットアップをします。まず、Collisionとなる、Ground Plane【A】とStatic Object【B】を準備します。Static ObjectのCollisionは、SDFからVolume Sampleを使ってセッティングします。次に、FLIP Object DOP【C】を作成し、Initial DataからParticle Fieldに設定し、SOPからソースジオメトリを読み込みます。Guidの設定で、ParticleのVisualizationは、Valueを"heat"に設定し、Black Bodyで表示しておくと、今回のようなケースでは見やすいでしょう。続いて、FLIP Solver DOP【D】を設定します。今回はCollisionの設定において、Velocity TypeをRigidにしました【1】。また、Viscosityをアクティブにして、Attributeから値をCopyするように設定しています【2】

次に、熱の移行の設定です。SOP Solver DOP【E】を使って、現在のシミュレーションジオメトリに対して、Object Merge SOP【F】で熱源のジオメトリをSOPから読み込み、Attribute Transfer SOP【G】で"heat"のAttributeを移行します。これにより、熱源付近にだけ熱が伝わった状態になります。その熱を利用して、Viscosityを溶かしていきます。Geometry VOP DOP【H】を使って、"heat"を"temperature"に変換し、また、"temperature"を"viscosity"へ変換します【3】。つまり、温度が上がった場合、粘度を下げるような計算を行なっています【4】


その際に、様々な係数を加算乗算することでアクションを調整しています。VOP内で更新されたAttributeは次のフレームでまた引き継がれて更新をくり返していく状況になります。また、熱はGas Linear Combination DOPを使って冷却するしくみを設定します。"heat"【5】は時間とともに、累乗的に減少する設定になっています【6】。これにより、徐々に溶けた液体は粘性を取り戻していきます。つまり、冷めて固まる設定になります。これで、熱源によってカットされるシミュレーションの設定が完了しました【7】

次ページ:
03 Mesh Flow

その他の連載