On this page |
グラスやプール、その他の様々な容器やタンクを満たすのは、流体シミュレーションでよくある場面です。 HoudiniのSOP FLIP流体では、オブジェクトを満たす3つの異なるモードを選択することができ、それぞれ異なる結果が得られます。 オブジェクトを満たすには、ソースジオメトリまたはボリュームからパーティクルを生成して放出する必要があります。 この目的のために、HoudiniにはFLIP Boundary SOPノードが用意されています。 クリック数を抑えたいのであれば、FLIP Source: Instant、FLIP Source: Pressure、FLIP Source: Velocityといったどれかのマクロを使用すると良いでしょう。 すべてのノードに関連するパラメータは Boundary です。 詳細は、後で手順を追ったガイドで説明します。
-
None の挙動は、HoudiniのDOP FLIP流体ソースと非常によく似ています。
-
Pressure は、圧力(およびオプションで追加のVelocity)に基づいてパーティクルを放出します。
-
Velocity は、Velocityのみに基づいてパーティクルを放出します。
例えばFLIP Container SOP内に新しいパーティクルをソーシングするだけの場合は、ほとんど違いが分からないことでしょう。 オブジェクトを満たす時に実際の違いがはっきりします。
FLIPネットワーク ¶
ネットワークセットアップは、どの Boundary メソッドでもまったく同じです。 ここでは、グラスを水で満たしますが、他のオブジェクトにも使用することができます。
-
obj レベルで、⇥ Tabを押し
geo
と入力してGeometry SOPノードを作成します。そのノードをダブルクリックして中に入ります。 -
FLIP Container SOPを作成します。コンテナの寸法は、上流のオブジェクト(ボックスなど)から定義することができます。または、ノードの Scale 値を使うこともできます。今のところは、デフォルトのままにしておきます。
-
FLIP Containerの Particle Separation を
0.015
に設定します。このパラメータは、流体および衝突オブジェクトの解像度を定義します。設定が小さいほど、多くのパーティクルが生成され、流体とオブジェクトとの衝突が改善されますが、シミュレーション時間は長くなります。シーンの寸法に応じて Particle Separation を調整する必要があります。 -
FLIP Collide SOPノードを追加して、その最初の3つの入力をFLIP Containerの呼応する出力に接続します。4番目の入力はグラス用です。
-
FLIP Boundary SOPを追加します。再度、すべての入力を上流ノードの呼応する出力に接続します。 Boundary タイプを色々と変更していく予定なので、ここではマクロを使用するよりも、汎用的なオペレータを使用する方が都合が良いです。 Boundary はデフォルトで None が選択されています。
-
最後に、FLIP Solver SOPノードを追加して接続します。
グラスジオメトリと衝突 ¶
このシーンのグラスはAlembicファイルからインポートしていますが、これは必須ではありません。 重要なのは、オブジェクトが壁に挟まれていることと、漏れないように小さすぎないことです。 FLIP流体は大規模なシミュレーション向けに開発されたものなので、グラスは約2メートルという非現実的なスケールになっています。
-
Alembicファイルをロードするために、Alembic SOPノードを作成します。
-
File Name に移動して、 Open floating file chooser アイコンをクリックします。グラスを含むファイルを選択します。
-
Unpack SOPを配置して、その入力をAlembicの出力に接続します。このノードは、Alembicファイルからモデルを抽出します。
-
このUnpackノードをFLIP Collide SOPの4番目の入力に接続します。
-
このUnpackノードの Display/Render フラグをオンにします。
-
ビューポートに移動して、シェーディングモードアイコンを探します。それをクリックして、メニューから Wireframe を選択します。グラスが透明になり、内部の構造を見ることができます。
グラスの寸法は、FLIP流体コンテナのサイズも決定します。
-
FLIP Containerノードを選択します。
-
Domain セクションに移動します。リソースを節約したいので、コンテナがグラスとぴったり合うように Size を変更します。ドメインの境界とグラスの間にはいくらか隙間を残してください。このシーンでは、 Scale は
3,3,3
です。
ソースジオメトリ ¶
ソースはオブジェクトを介して表現されます。 オブジェクトの位置は、ソルバにパーティクルを放出する位置を伝えます。 ソースの定義には、閉じたオブジェクトやボリュームのほぼどれも使用することができます。
-
Sphere SOPを追加して、その出力をFLIP Boundaryノードの4番目の入力に接続します。
-
球の Uniform Scale はグラス全体の寸法によって異なります。このセットアップでは
0.3
の値を使用しますが、球は自由に小さくしたり大きくしたりしてください。 -
Center.Y 位置を設定します。FLIP Boundaryの Pressure メソッドの場合、ソースオブジェクトは最終的な水位の 下に 配置されていることが必須です。球のY位置を変更して、以下の画像のような結果にしてください。
衝突の微調整 ¶
セットアップはシミュレーションを開始できる状態になっていますが、たいていの場合で衝突を調整する必要があります。衝突に影響する要素がいくつかあります。
-
元の衝突ジオメトリのスケールと品質が最初の要素です。非常に薄いまたは小さいオブジェクトは問題になることが多いです。
-
FLIP Containerの Particle Separation と Grid Scale は、衝突ジオメトリの品質を定義します。値が小さいほど品質が良くなります。このシーンでは、 Grid Scale は
1.2
です。 -
デフォルトでは、FLIP Collideの Volume Collide と Surface Collide オプションがオンになっています。このシーンでは Volume Collide のみ使用します。
-
FLIP Solverの Collision タブには追加の設定があります。 Collision Behavior で、 Particles Collision メニューが Particles に設定されています。この場合のように、ボリュームからのみ衝突を計算したい時は、ドロップダウンを Move Outside Collision に設定します。
Note
上記の設定と値は この シーンには最適ですが、シーンによっては別の組み合わせが必要になることもあります。
Boundary: None ¶
Note
シミュレーションを行なう前に、プレイバーの Global Animation End Frame を125
に設定します。
フル範囲の240
フレームはここでは必要ありません。
デフォルトのソーシングメソッドは None です。 プレイバーのアイコンをクリックして、シミュレーションを開始します。 数フレーム後、水位がそれ以上高くならないことを観察できます。 これは、DOP FLIP流体で既にご存知の挙動です。
Boundary: Velocity ¶
FLIP Boundaryノードに移動して、 Boundary を Velocity に変更します。
このモードには、 None とまったく同じパラメータが用意されています。
フレーム1
に戻り、シミュレーションを開始します。
前のシミュレーションとは異なり、水位がソースオブジェクトよりも高くなります。
フレーム125
を過ぎてもシミュレーションを続けると、水がグラスの縁から溢れます。
Boundary: Pressure ¶
このモードでは、グラスを満たすレベルを決定することができます。 ソルバが流体の静水圧(Hydrostatic Pressure)に反応し、それを新しいパーティクルのソーシングを停止する閾値として使用します。
Note
Hydrostatic Pressure には任意の値を入力することができますが、妥当な結果を得るには0.1
から1
の範囲の値のみを使用してください。
-
Boundary を Pressure に変更します。
-
圧力ベースのソーシングはひどく乱れる可能性があるので、 Hydrostatic Pressure をアニメーションさせるのが良いでしょう。
-
フレーム
1
に移動して、 Hydrostatic Pressure に0.1
と入力します。パラメータ名をAlt + クリックしてアニメーションキーを作成します。 -
フレーム
24
に移動して1.0
と入力し、もう1つキーを作成します。 -
Water Level に
1
と入力します。このパラメータは、グラスを満たすターゲットレベルに相当し、青の線で表示されます。 -
シミュレーションを開始します。
水位が1
の高さに到達すると、ソーシングが停止することを確認できますが、これは完全には正しくありません。
グラスを満たす領域は地面に届いておらず、0.15
ユニットのオフセットがあります。
Water Origin に移動して0,0.15,0
と入力し、ターゲットレベルを更新してから、再度シミュレーションを行ないます。
これで、グラスを満たす高さが実質的に1
ユニットになります。