On this page |
Narrow Band(狭帯域)を使ったFLIPシミュレーションの初期化
標準のFLIP流体シミュレーションは、パーティクルで完全に満たされた液体ボリュームから開始します。 FLIP Solver のNarrow Bandを有効にしてシミュレーションを開始させると、それらのパーティクルのみが除去されます。 大規模シミュレーションでは、それらのパーティクルが大量のメモリを占有してしまって、強制終了せざるを得なくなってしまいます。 そのことから、FLIPシミュレーションをNarrow Band(狭帯域)として直接初期化した方が良いでしょう。
以下のサンプルは、流体シミュレーションの開始時にNarrow Bandで初期化された流体を生成する方法について説明しています。
-
ビューポート内でTabメニューを使って
Rubber Toyを作成します。このオブジェクトを使って、Narrow Bandシミュレーションを作成します。
-
Particle Fluids シェルフツールの
FLIP Fluid from Objectをクリックして、FLIP流体に変換するオブジェクトとして
Rubber Toyを選択して、FLIPシミュレーションを作成します。
-
testgeometry_rubbertoy_object1
ノードに入って、VDB from Polygons SOPを作成し、 Voxel Size に、そのFLIPシミュレーションに合ったサイズを設定します。例えば、
FLIP ObjectのParticle SeparationパラメータとGrid Scaleパラメータを乗算したエクスプレッションを設定します。
-
VDB from Polygonsの入力を Rubber Toy の出力に接続します。
-
VDB from Polygonsの後に
Null SOPノードを追加して、名前を SURFACE にします。
-
その
Nullの後に
VDB Reshape SDF SOPを追加して、 Operation を Erode に設定し、 Offset を
FLIP SolverのNarrow Bandタブの Bandwidth パラメータに合わせます。
-
VDB Combine SOPを追加し、その1番目の入力に SURFACE
Nullの出力を、2番目の入力に
VDB Reshapeの出力を接続します。これは、パーティクルのばら撒き先となるNarrow Bandボリュームを生成します。
-
VDB Combineノードの Operation を SDF Difference に設定します。
-
そのNarrow Band内にパーティクルをばら撒くために、
FLIP Source SOPを作成し、その入力を
VDB Combineノードの出力に接続します。
-
Voxel Size を
VDB from PolygonsノードのVoxel Sizeに合わせ、 Particle Separation を
FLIP ObjectのParticle Separationに合わせ、 Oversampling を
FLIP SolverのSurface Oversamplingに合わせます。
-
FLIP Source SOPの後に
Null SOPを追加して、名前を PARTICLES にします。
-
FLIP Objectの Input Type を Narrow Band 、 SOP Path を PARTICLES ノードパス、 Surface Volume を SURFACE ノードパスに設定します。
-
FLIP Solverの Enable Particle Narrow Band を有効にします。
Note
カスタムの初期Velocityフィールドが必要であれば、FLIP Object DOPの Velocity Volume パラメータにVelocityボリュームパスを追加することで、それをFLIPシミュレーションに接続することができます。
上記で生成したパーティクルは、それと同じVelocityフィールドで初期化されます。
パーティクルアトリビュートとボリュームフィールドのペアリング
パーティクルアトリビュートを使って、viscosity
、density
、temperature
、color
などの可変液体パラメータを設定することはできません。
その理由は、液体ボリュームからNarrow Bandよりも深くにあるパーティクルはシミュレーションステップ毎に除去されるからです。
代わりに、 Attribute/Field Pair オプションを使って、パーティクルアトリビュートデータをボリュームフィールドにバインドすることができます。
以下のサンプルは、色の付いた液体を空っぽのコンテナに注ぐシミュレーションを作成する方法について説明しています。
そのコンテナに沈んでNarrow Bandを過ぎたパーティクルはシミュレーションから除去されますが、そのカラーはボリュームフィールドで維持されます。
そのcolor
アトリビュートは、このボリュームフィールドを介してシミュレーションによって移流します。
-
Particle Fluids シェルフの
FLIP Tankツールをクリックして、色の付いた液体を注ぐFLIPタンクを作成します。
-
オブジェクトレベルから
fliptank_initial
ノードに入って、initial_particles
ノードとOUT_INITIAL_PARTICLES
ノードの間にAttribute Createノードを作成します。
-
Name を
Cd
、 Type をVector
に設定します。 -
AutoDopNetwork に入って、
FLIP Objectと
FLIP Solverの間に
Vector Field DOPを追加して、 Data Name を
Cd
に設定します。 -
Enable Solver DOPを作成して、その出力を
FLIP Solverの(3番目の) Volume Velocity 入力に接続します。
-
最初にシミュレーションされるフレームの初めにカスタムフィールドを初期化するために、
Enable Solverノードの Enable Solvers パラメータに
$FF==2
エクスプレッションを追加します。これはデフォルトで2番目のフレームになっています。 -
Gas Match Field DOPを作成して、その出力を Enable Solver の入力に接続します。
-
Field を
Cd
、 Reference Field をsurface
、 Rank をVector
に設定します。 -
オブジェクトレベルに戻り、 Create シェルフの
Sphereツールをクリックします。その球をタンクの水位よりも上側に移動し、目的のサイズにスケールします。
-
Particle Fluids シェルフの
Emit Particle Fluidツールをクリックして、流体の放出元となるオブジェクトとして球を選択し、流体の放出先となるFLIPパーティクルを選択します。
-
オブジェクトレベルに戻り、そのSphereオブジェクトに入って、
FLIP Sourceノードと
Nullノードの間に
Attribute Create SOPノードを配置します。
-
Name を
Cd
、 Type をVector
、 Value を1,0,0,0
に設定します。 -
AutoDopNetwork内の
FLIP Solverに進んで、 Enable Particle Narrow Band が有効になっていることを確認します。
-
Attribute-Field Pairs パラメータの隣にある+をクリックして、 Attribute と Field の両方に
Cd
を設定します。
Note
シミュレーション中にカラーフィールドを保存するために、fliptank_fluid
オブジェクト内のDOP I/Oノード(
import_fliptank
)でCd
を Fields に追加します。