On this page | |
Since | 11.0 |
FLIP Configure Object DOPは、パーティクル流体オブジェクトを受け取り、そのオブジェクトをFLIPベースの流体として使用するのに必要なデータを取り付けます。
パラメータ ¶
Division Size
FLIP Fluid Solverは、Velocity予測の実行先となるボリュームグリッドを作成します。このグリッドのサイズは、実際のパーティクルサイズに合わせる必要はありません。
Division Size がパーティクルサイズより小さい場合、無駄な作業が発生します。
パーティクルサイズよりも大きい Division Size は、隣接するパーティクルまで影響を及ぼし、その結果、より滑らかで、より安定して、より高速なシミュレーションになります。 推奨する Division Size は、パーティクルの距離間隔の2倍なので、1グリッドセルあたりほぼ8個のパーティクルになります。
Division Size を半分にすると、処理が8倍増えます。
Collision Division Size
衝突関連のフィールドに対する分割サイズ。
衝突フィールドを他のシミュレーションフィールドよりも高い解像度にするのに役に立ちます。 特に低解像度のシミュレーションをプロトタイプする時、FLIP Fluid Solverが計算時に小数点の衝突ボクセルを考慮します。
この値を全体の Division Size の小数として設定した場合、高解像度のシミュレーションを実行するときには、その値を元に戻すことを忘れないで下さい。 他のオプションでは、衝突フィールドを可視化するのに十分な衝突ディテールを用意した分割サイズを選択し、それを固定値のままにして、全体の分割サイズの変更から独立させます。
Density
流体の質量密度。この値は、オブジェクトのDensityフィールドに保存され、FLIP Solverの Volume Velocity 入力によって操作することができます。 また、 Density タブを使えば、パーティクルアトリビュートでその値を上書きすることができます。
Viscosity
流体の動的粘度。 Viscosity パラメータの値は、パーティクルのスケールに依存します。 デフォルトのスケールでは、ドロドロした流体には1000くらいの値が必要で、パン生地のような流体には10000くらいの値が必要です。 ユーザガイドの粘度に関する考察を参照してください。
この値は、オブジェクトのViscosityフィールドに保存され、FLIP Solverの Volume Velocity 入力によって操作することができます。 また、 Viscosity タブを使えば、パーティクルアトリビュートでその値を上書きすることができます。
この設定を有効にするには、FLIP Solverの Viscosity タブで Enable Viscosity を設定しなければなりません。
Add Divergence Field
ローカルのパーティクルVelocityを常に発散なしにするのではなく、Divergence(発散)フィールドを使用することで、人工的なDivergence(発散)やConvergence(収束)を取り込むことができます。 このフィールドは、FLIP Solverの Divergence タブを使用することでも操作することができます。
Use External SOPs
このオプションは、SOPボリュームからSurface/Velocityボリュームを初期化します。 これは、FLIP Solverの Narrow Band オプションを使用する時に役立ちます。 その理由は、そのオプションを有効にすると、シミュレーションを初期化するのに、もはやボリューム全体をパーティクルで満たす必要がないからです。
Closed Boundaries
FLIP Solverの Volume Limits タブで指定した通りに、パーティクルを弾丸のように飛ばせるようにするかどうか、 またはパーティクルが最大境界に到達した時に、見えないグラスに当てるようにするかどうか制御します。 このチェックボックスをオンにすると、水槽形式のシミュレーションのセットアップが簡単になります。
Guides ¶
FLIP流体を定義した各フィールドを、いくつかの方法によって可視化することができます。 Scalar Field VisualizationまたはVector Field Visualizationのヘルプでは、 それらの動作に関する詳細を説明しています。
入力 ¶
First
適切なデータを取り付けることで、FLIP流体に変わるパーティクル流体オブジェクト。
出力 ¶
First
このノードで作成されたFLIPデータ付きのパーティクル流体オブジェクトが、単一出力を通して送り出されます。
ローカル変数 ¶
ST
ノードが評価されるシミュレーション時間です。
この値は、変数Tで表現される現在のHoudiniの時間と同じではなく、DOP Networkの Offset Time と Scale Time のパラメータの設定に依存しています。
STは、シミュレーションの開始時間がゼロになるようになっています。
つまり、シミュレーションの最初のタイムステップをテストする時は、$T == 0
や$FF == 1
を使うのではなくて、$ST == 0
のようなテストを使うのがベストです。
SF
ノードが評価されるシミュレーションフレーム(正確には、シミュレーションタイムステップ番号)。
この値は、変数Fで表現される現在のHoudiniのフレーム番号と同じではなく、DOP Networkパラメータの設定に依存しています。 代わりに、この値は、シミュレーション時間(ST)をシミュレーションタイムステップサイズ(TIMESTEP)で割算した値と同じです。
TIMESTEP
シミュレーションタイムステップのサイズ。 この値は、1秒あたりのユニットで表現した値をスケールするのに役に立ちますが、タイムステップ毎に適用されます。
SFPS
TIMESTEPの逆数。 シミュレーション時間の1秒あたりのタイムステップ数です。
SNOBJ
シミュレーション内のオブジェクトの数。 Empty Object DOPなどのオブジェクトを作成するノードでは、SNOBJは、オブジェクトが評価される度に値が増えます。
固有のオブジェクト名を確保する良い方法は、object_$SNOBJ
のようなエクスプレッションを使うことです。
NOBJ
このタイムステップ間で現行ノードで評価されるオブジェクトの数。 この値は、多くのノードがシミュレーション内のオブジェクトすべてを処理しないので、SNOBJとは異なります。
NOBJは、ノードが各オブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJ
ノードで処理される特定のオブジェクトのインデックス。 この値は、指定したタイムステップで常にゼロからNOBJ-1まで実行されます。 この値は、OBJIDやOBJNAMEなどのシミュレーション内の現行オブジェクトを識別せず、現在の処理順でのオブジェクトの順番を識別します。
この値は、オブジェクト毎に乱数を生成するのに役に立ちます。他には、処理別にオブジェクトを2,3のグループに分けるのに役に立ちます。 この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
OBJID
処理されているオブジェクトの固有ID。 すべてのオブジェクトは、すべての時間のシミュレーション内のオブジェクトすべてで固有な整数値が割り当てられています。たとえオブジェクトが削除されても、そのIDは決して再利用されません。 オブジェクトIDは、オブジェクト毎に別々の処理をさせたい場面(例えば、オブジェクト毎に固有の乱数を生成したい)で非常に役に立ちます。
この値は、dopfieldエクスプレッション関数を使って、オブジェクトの情報を検索するのにベストな方法です。
OBJIDは、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら-1を返します。
ALLOBJIDS
この文字列には、現行ノードで処理されているオブジェクトすべての固有のオブジェクトIDをスペース区切りにしたリストが含まれています。
ALLOBJNAMES
この文字列には、現行ノードで処理されているオブジェクトすべての名前をスペース区切りにしたリストが含まれています。
OBJCT
現行オブジェクトが作成された時のシミュレーション時間(変数STを参照)。
そのため、オブジェクトが現在のタイムステップで作成されたかどうかチェックするには、$ST == $OBJCT
のエクスプレッションが常に使われます。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJCF
現行オブジェクトが作成された時のシミュレーションフレーム(変数SFを参照)。
この値は、OBJCT変数にdopsttoframeエクスプレッションを使ったものと等価です。この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら0を返します。
OBJNAME
処理されているオブジェクトの名前を含んだ文字列値。
オブジェクト名は、シミュレーション内で固有であることが保証されていません。 しかし、オブジェクト名が固有になるように注意して名前を付けていれば、オブジェクトの識別は、オブジェクトIDよりも、オブジェクト名を指定するほうが簡単です。
オブジェクト名は、同じ名前を持つオブジェクトの数を仮想グループとして扱うこともできます。
“myobject”という名前のオブジェクトが20個あれば、DOPのActivationフィールドにstrcmp($OBJNAME, "myobject") == 0
を指定すると、DOPがその20個のオブジェクトのみを操作します。
この値は、ノードがオブジェクトを続けて処理(例えば、Group DOP)しないなら空っぽの文字列を返します。
DOPNET
現在のDOP Networkのフルパスを含んだ文字列値。 この値は、ノードを含むDOP Networkのパスを知りたりDOPサブネットのデジタルアセットで非常に役に立ちます。
Note
ほとんどのダイナミクスノードには、そのノードのパラメータと同じ名前のローカル変数があります。 例えば、Position DOPでは、以下のエクスプレッションを記述することができます:
$tx + 0.1
これはオブジェクトをタイムステップ毎にX軸方向に0.1単位分移動させます。
See also |