2017-10-03: Houdini 16 対応のため内容を更新。
Houdini のFLIP Fluid 上にオブジェクトを浮かばせる方法を
- 単一オブジェクトの場合
- 複数オブジェクトの場合
使用バージョン: Houdini FX 16.0.736 (H15 時の記事はこちら)
参考シーンファイルへのリンクは一番下にあり。
I. 単一オブジェクトの浮遊
Torus 一つと FLIP タンクの場合:
- Create シェルフから Torus をクリック、Enter キーを押して確定。原点に配置後、0,3,0に移動。
- Rigid Bodies シェルフから RBD Hero Object (左から2番目) を実行。
- 再生すれば、落下する。
- Particle Fluids シェルフから FLIP Tank (左から2番目) を実行。Enter キーを押して確定。とりあえず大きさはそのまま。
-
再生すれば、Torusは落下しFLIP Tank 水面と干渉するが、浮かずにそのままTankを突き抜けてしまう。
- AutoDopNetwork の中に入り、fliptank (FLIP Object) を選択。Particle Separation を 0.1 に変更 (デフォルトの値は 0.25)。
- flipsolver1 を選択。Volume Motion タブの下の部分にある Solver タブ 以下、Feedback Scale を 0 から 1 に変更。
- 同じく flipsolver1 の Substeps タブ以下の Max Substeps の値を 2 から 1 に変更。
RBD と Flip の相互衝突判定が行われる必要があり、この場合、Substeps を 1 にした方が安定した結果になる。 - 再生すると、落下した Torus は水中中ほどで止まりその後浮上してくる。
- 同じく AutoDopNetwork 以下の torus_object1 (RBD Object ノード) を選択。Physical タブにある Density を1000から 500 に下げると、Torus は軽いオブジェクトとなる。(やらなくとも良い)。
ここまでが h16_01_floatSingleObject.hip (Density は 1,000 のまま)。
II. 複数オブジェクトの浮遊
正しいノードの接続方法を早く理解するには新しいシーンでやるのが良いと思われる。よって、
- File->New。
- Create シェルフの Torus をクリック、Enter キーで確定。torus_object1 ができる。原点に配置後、0,3,0 に移動。
- torus_object1 の中に入り、Grid ノードを作成。grid1 ができる。
- シェルフから行う場合は、ツールを実行する前にTool Options を Create in context とし、作成される Grid が torus_object1 内に作成するようにする。
- Size をそれぞれ 9、
- Rows と Columns をそれぞれ 5
- Copy to Points ノードを作成
- torus1 を copy1 の左に接続
- grid1 を copy1 の右に接続
- Pack and Instance をオンに
- Transform Using Template Point Attributes をオフ
- これにより、コピーした 25 個すべてのTorus の向きが最初の Torus と同じになり、また Torus はすべてパックされた状態になる。
- Scene ビューに戻り、 torus_object1 を選択したまま、Rigid Bodies シェルフから RBD Fractured Object を実行。
すると RBD Packed Objects を作成するか RBD Fractured Objects を作成するか訊かれる。
ここでは RBD Fractured Objects を選択。- Packed Object を選択すると、のちの FLIP との衝突判定が単一方向になり、Fractured Objects を選択すると双方向になる。
- 単一オブジェクトの時と同様、Particle Fluids シェルフから FLIP Tank (左から2番目) を実行。Enter キーを押して確定。
- /obj/fluidtank_initial/fluidtank の中で Size を 14, 4, 14 とする。
- これで、作成した25 個の Torus より大きなFLIP コンテナが出来た。
- AutoDopNetwork の中に入り、fliptank (FLIP Object) を選択。Particle Separation を 0.1 に変更。
- flipsolver1 を選択。
Volume Motion タブの下の部分にある Solver タブ 以下、Feedback Scale を 0 から 1 に変更。 - 同じく flipsolver1 の Substeps タブ以下の Max Substeps の値を 2 から 1 に変更。
- AutoDopNetwork 以下の torus_object1 (RBD Object ノード) を選択、
- Display Geometry をオフ
- Collisions タブ -> Bullet Data の Show Guide Geometry をオン。
- Geometry Representation を Concave に変更。
- これで再生すると、25個の Torus が落下し、すべてバラバラに FLIPと干渉する。
ここまでが h16_02_floatMultiObjects.hip
まとめ
ここまで単一または複数オブジェクトをFlip 流体に浮べる方法を示した。
- 挙動を決定する上で最も重要な FLIP 流体のパラメータは Particle Separation である。衝突オブジェクトが正しく干渉しない場合、Substeps などを変更する前に、この値を調整することが肝要。
- FLIP fluid が他のオブジェクトと干渉するためには、FLIP Solverノードの Feedback Scale が0以上である必要がある。そして Feedback Scale を 1 にした場合、Substep 数の設定は個々のソルバで行うのではなく、AutoDopNetwork で一括管理するのが望ましい。よって、FLIP Solver の Max Substeps は 1 にする (デフォルトは 2)。そうしないと非常に不安定になる。
- 浮力は、浮かせるオブジェクトの Densityと Feedback Scale とを調整して行うが、Fluidタンクのパーティクル数が変わると Densityの値も再調整する必要あり。
- シェルフツールを使うと、単一オブジェクトの場合 AutoDopNetwork 内のtorus_object1 は RBD Object ノードタイプであるのに対し、複数オブジェクトは、上記の方法で作成した場合、作成されたノード名が同じであっても、ノードタイプは RBD Fractured Object である。よって単一オブジェクトを (RBD Objectで) 作った上でGeometryビューでTorusの数を複数にしても単一オブジェクトとして動作する。ここは注意が必要。
- RBD Packed Objectは FLIP は、双方向で衝突判定しないので使えない。
参考シーンファイル:
- H16: h16_flipfluidfloat.zip (345KB)
- H15 以前のはこちら
最終更新: 2017-10-03
0 件のコメント:
コメントを投稿