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 に追加します。