FLIPとRBDを組み合わせた例を紹介します。
TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com
EDIT_小村仁美 / Hitomi Komura(CGWORLD)
FLIPとRBDのエミット
今回は、FLIPのシミュレーションとRBDのシミュレーションを同時に行い、それぞれを発生させるようなセットアップを紹介します。ただ、よくあるシミュレーションだと面白くないので、今回は、少し趣向を凝らしたようなアプローチを目指したいと思います。粘性をもった液体と、細かく発生するRBDをいかに制御するかがキーになります。
昨年はHoudini 18が登場し、FLIPのシミュレーションも大きく進化しました。今回は新機能を紹介するわけではありませんが、どんどん進化するHoudiniに置いて行かれないよう習得のモチベーションを保つためにも、新機能はある程度追いかけておいたほうが良いと思います。実際筆者は置いて行かれ気味で、一抹の寂しさを感じています。隙間を見つけて新しい発見を続けていけるよう精進しますので、引き続き本連載をお願い致します。
今回のHoudiniプロジェクトデータはこちら01 Source Setup
ソースのセットアップを解説します。
まず、FLIPのシミュレーション用にソースの作成を行います。今回は通常のFLIP発生源と共に、RBDも同時に発生するようなしくみを作ります。まず、発生源になるSphereに対して、サーフェスの下方向をエリアにするAttributeを作成します【A】。Wrangleを使って-Y方向と法線方向の内積から作成します【1】。そのエリアから、Particle【B】を発生させます。このタイミングが、RBDの発生タイミングになるため、必要な量になるように調整します。それに対してPscaleをランダムな値で作成し、SphereなどのRBD用ジオメトリをCopyします【2】。続いて、"name"のAttributeを作成します。今回の場合は、1フレーム1つ以下の発生なので、フレーム番号を入れ込んでいます。それ以上発生する際は、"id"などと組み合わせると良いと思います【C】。
次に、ソースを自然に揺らすためにアニメーションします【D】。キーフレームを打つのは面倒なので、Motion FX【E】を使ってアニメーションを追加します【3】。この発生源と先ほど作成した発生源をFLIP Source【F】を使ってソース化します。さらに、余分な部分のPoint【G】取り除いてソースの完成です【4】。
最後に、CollisionになるジオメトリをVDB from Polygons SOPを使ってSDFに変換します【H】【5】。このようにすることで、きれいなCollisionを行うことができます。
02 Sim Flow
シミュレーションのフローを解説します。
シミュレーションのセットアップをします。まず、CollisionとなるGroud PlaneとStatic Object【A】を準備します。Static ObjectのCollision設定は、Volume Sample【1】を使って、SDFから生成します【2】。続いて、RBD Fractured Object DOP【B】で、Particleから作成したソースからRBDを発生させます。このとき、Creation Frameは毎フレームにします【3】。こうすることで、"name"によって切り分けられたRBDを作成することが可能です。
次に、FLIP Object DOP【C】を作成し、Volume Source DOP【D】でエミットの準備をします。FLIP Solver DOP【E】を作成し、Volume Limitを設定してください。今回のような場合、遠くに飛ぶようなFluidが作成される可能性が十分考えられますので、範囲は最小限にしたほうが軽量化できます。液体自体にViscosityを設定し粘性を加えます【4】。これで、RBDと同時に発生させることができます【5】。
また、Collisionにまとわりつくような雰囲気を作りたいので、Stickyの設定を追加します【6】。これにより、Collisionに張り付きます【7】。最後に、Collision Fieldがきちんと生成されているか、ビジュアライズして確認することも大事です【8】。
[[SplitPage]]
03 Cache Flow
キャッシュジオメトリのフローを解説します。
シミュレーションが完了したら、キャッシュを作成する準備をします。単純にキャッシュを取るのではなく、その後のフローで必要になるであろう準備もこの時点でしておくのが良いでしょう。また、今回は、FLIPとRBDを同時にキャッシュして、後で切り分けるフローにしてあります。
まずは、DOP Import SOPとDOP I/O SOPを使ってDOPから必要なデータを読み込みます【A】。FLIPのように重いジオメトリは、Fluid Compress SOP【B】を使って軽量化します。RBDも必要であればPackなどにしても良いでしょう【1】。
次に、キャッシュしたジオメトリを切り分け、それぞれをUnpackします【C】【2】。RBD側にはPointを新たに作成し、状態としてFLIPと同じ"pscale"を作成したFluidのようにします。これは、まとわりつくFluidを補足するものです【D】。それらを、Particle Fluid Surface SOPを使ってメッシュにします。今回は、SDFに変換したもの【3】をマニュアルで調整しています【E】。
最後にPolygonに変換して完了です【F】【4】。
04 Operators
主要ノードを解説します。
●Fluid Compress SOP&Particle Fluid Surface SOP
今回紹介するノードは、Fluid Compress SOPとParticle Fluid Surface SOPです。
これらは、FLIPのシミュレーションをする上では欠かせないオペレータたちです。それぞれ、PackとVDBという比較的新しいものを利用していますが、それらが登場する以前とは比べ物にならない速度や要領で作業することが可能になっています。
Fluid Compress SOPは、指定した深度以下を間引き、帯域制限をしVDBやPackに変換するため、非常に軽い状態にして保存することが可能です。これによってディスクスペースを確保することができ、またネットワークへの負荷も軽減されます。
併せて、Particle Fluid Surface SOPは、Fluid Compress SOPで失ったデータを再生成できるように設計されており、対にして使用することで、軽い状態でメッシュを張ることができます。Houdiniのメッシュ操作は、VDBの登場で格段に向上しました。さらにディテールを保持しやすいようなしくみを自分で組み込むことも可能なので、非常に汎用性が高いです。
-
「Houdini COOKBOOK +ACADEMY」
Houdiniを基礎から楽しく学ぶオンライン講座
公開日程:毎週金曜日公開(予定)
価格:1,200円(税込)
※第一回「Houdiniの基本概念とインターフェイス」は無料公開中
受講対象:Houdiniをこれから学びたい方、Houdiniの勉強で挫折した方など
cgworld.jp/special/houdinicookbookacademy