On this page |
Smoke Object DOPは、DOPシミュレーション内にSmokeオブジェクトを作成します。 このDOPは、新しいオブジェクトを作成して、それが適切に順応するSmoke Objectになるために必要なサブデータを取り付けます。
パラメータ ¶
Properties ¶
Two Dimensional
ボクセルグリッドの分割の1つから2次元フィールドを作成します。
Plane
Two Dimensional に設定すると、この平面が、影響を受けない軸を決めます。
Division Method
正方形でないなら、指定したサイズが指定したボクセル分割数に分割されます。 それらのボクセルの辺が同じになっていないと、歪んだシミュレーションになる可能性があります。
軸を指定した時、その軸が分割数を決める基準と見なされます。 選択した軸のサイズで均一に分割することでボクセルサイズが決まります。 他の軸の分割は、必要なサイズに合うように一番近い整数の複数値に調整されます。
最終的には、非選択の軸方向のサイズが均一なボクセルサイズになるように変わります。 Max Axis オプションを選択した場合、その最大サイズの軸が使用されます。
By Size を指定した時、 Division Size によって、指定したサイズのボックスに合うボクセル数が計算されます。
Uniform Divisions
ボクセルグリッドのキー軸の解像度。これは、1つのパラメータで全体の解像度を制御して、均一なボクセルを保持することができます。 Uniform Voxels オプションには、参照として使用する軸を指定します。通常では、最大軸を使用するのは一番安全です。
Divisions
Smokeオブジェクトの計算で使用するボクセルグリッドの解像度。 解像度が高いほど外観と動きの両方がより細かくなります。 しかし、分割数を2倍にすると、8倍のメモリ容量が必要になります。
サブステップはボクセルサイズに比例するので、分割数を2倍にすると、2倍のサブステップが必要になり、その結果、シミュレーション時間が16倍になります。
Division Size
ボクセルの明示サイズ。ボクセル数は、このサイズのボクセルの整数の数を、指定した境界に合わせることで計算されます。
Size
ボクセルグリッドのサイズ。各ボクセルのサイズは、この値を分割数で割った値になります。
Center
ボクセルグリッドの中心のワールド空間の位置。
Closed Boundaries
煙がこのボックスに入らないようにまたは出て行かないようにVelocityフィールドをクランプ(制限)することができます。 Closed Boundaries を設定しなかった場合、その境界上のVelocityを変化させることができるようになり、そのボックスから煙が出て行くことができます。
Creation ¶
Creation Frame Specifies Simulation Frame
作成フレームが、グローバルのHoudiniフレーム($F
)またはシミュレーション固有のフレーム($SF
)のどちらを参照するか決めます。
後者は、DOP Networkレベルのオフセット時間とスケール時間の影響を受けます。
Creation Frame
オブジェクトが作成されるフレーム番号。 現行フレーム番号がこのパラメータの値と同じ時にだけオブジェクトが作成されます。 つまり、DOP Networkは、指定したフレームでのタイムステップを評価しなければならないことを意味します。そうしないとオブジェクトが作成されません。
例えば、この値を3.5に設定すれば、必ずDOP Networkがフレーム3.5でタイムステップを持つように、DOP Networkの Timestep パラメータを1/(2*$FPS)
に変更しなければなりません。
Number of Objects
単一オブジェクトを作成するのではなく、いくつかの同一オブジェクトを作成することができます。
$OBJID
エクスプレッションを使用することで、各オブジェクトのパラメータを個々に設定することができます。
Object Name
作成されるオブジェクトの名前。 これはGeometry Spreadsheet Viewで表示される名前で、このオブジェクトを外部から参照するために使用します。
Note
同じ名前でたくさんのオブジェクトを持つことができますが、それでは参照の書き込みが困難になるので、名前には$OBJID
のような変数を使用することを推奨します。
Solve On Creation Frame
有効にすると、新しく作成されたオブジェクトは、そのオブジェクトが作成された時のタイムステップでソルバによって計算されます。
このノードが、シミュレーションの初期状態でのオブジェクトを作成するのではなく、シミュレーション中にオブジェクトをコピーするのであれば、通常では、このパラメータをオンにします。
Allow Caching
巨大なオブジェクトをキャッシュ化しないようにすることで、衝突ジオメトリの前のフレームのキャッシュに十分な空き容量を確保することができます。
このオプションは、非常に大きなシミュレーションを扱う時にだけ設定してください。 可能であればより大きなメモリキャッシュを使用する方が望ましいです。
Instancing ¶
作成フレームまたは処理中の現行フレーム( Continuous を使用 )のどちらかで見つかったすべてのポイントに対してSmokeコンテナを作成します。
デフォルトでは、そのコンテナは、ポイントの中心位置に作成されます。
そのサイズは、ポイントのscale
ベクトルアトリビュートで定義します。
scale
アトリビュートが見つからなかった場合、そのコンテナは、デフォルトの Size に戻ります。
Create Objects From Points
インスタンス化を有効にします。
init_cluster
データが、作成されたすべてのSmokeオブジェクトに追加されます。
指定する番号は、ポイントのcluster
アトリビュートによって制御することができます。
このデータは、Cluster Pointsノードを使って生成することができます。
cluster
アトリビュートを指定しなかった場合、ポイント番号が使われます。
この番号は、SOPから正しいボリューム情報を取得するために、Volume Sourceマイクロソルバで使われます。
Override Container Size
scale
Pointアトリビュートを使って、コンテナのサイズを制御します。
その中心は、ポイントの位置で定義されます。
これが無効またはscale
Pointアトリビュートが見つからない時、コンテナのサイズと位置は、デフォルトのパラメータの Size と Center で設定することができます。
Override Division Size
divsize
Pointアトリビュートを使って、インスタンスオブジェクトの分割サイズを制御します。そのアトリビュートが見つからない時、デフォルトの Division Size が使われます。
Number of Objects
Create Objects From Points がオフの場合、作成フレームで作成されるオブジェクト数をここで定義します。 デフォルト値は1です。
Instance Points
ポイントをインスタンス化するポイントジオメトリを含んだノード。
Continuous
反復毎に見つかったすべてポイントに対してSmokeオブジェクトを作成します。そのため、これを有効化するのには注意してください。 デフォルトでは、作成フレームで見つかったすべてのポイントに対して1回だけインスタンス化がされます。 実行中にオブジェクトを作成する必要がある時は、 Continuous を使ってください。 例えば衝突の瞬間にオブジェクトを作成する必要がある時は、ポイントのみが存在するようにして、その後にポイントを削除します。 これは、前のフレームとポイントの存在を比較するTimeShiftノードを使うことで可能です。
Guides ¶
煙シミュレーションを定義した各フィールドは、いくつかの方法で可視化することができます。 Scalar Field VisualizationまたはVector Field Visualizationのヘルプでは、 それらの動作に関する詳細を説明しています。
Initial Data ¶
Density SOP Path
これは、Densityサブデータの初期化に使用するSOPのパスです。
このSOPは、ボリュームオブジェクトで、例えばIso Offset SOPの Output Type を Fog Volume に設定して生成します。
Scale
パス毎のスケールオプションは、SOPボリュームを適用する前にそのボリュームを事前スケールすることができます。 これは、例えば、初期Temperature量を増幅するのに非常に役に立ちます。
Temperature SOP Path
Temperatureデータを初期化するSOP。 Temperature(温度)フィールドは、Smoke Solverの内部浮力で使用されます。
Fuel SOP Path
Fuelデータを初期化するSOP。 Fuel(燃料)フィールドは、Smoke Solverの古い燃焼モデルで使用されます。
Velocity SOP Path
煙のVelocityを初期化するSOP。 このSOPには、初期VelocityフィールドのX,Y,Zコンポーネントを記録した3つのボリュームプリミティブを指定します。
Use Object Transform
Density SOPをサンプリングする時、Density SOPとDOPシミュレーション間の相対トランスフォームを考慮するかどうか決めます。
Wind Tunnel Direction
Velocityフィールドは、この一定外部値に初期化されます。 さらに、その終了条件がこの値に設定されます。 これは、風洞のような効果を作成することができます。
ゼロ以外の外部方向は、 Closed Boundaries を設定しても、境界Velocityがゼロ以外の値にクランプ(制限)されるので、煙をそのボックスに残すことができます。
Border Type
定義したボックス外でフィールドがサンプリングされた時の挙動。
Constant
初期値を返します。
Repeat
フィールドがラップ(繰り返し)し、反対側のフィールドの値を返します。
Streak
サンプルに一番近いフィールドのエッジの値を返します。
Add Rest Field
シェーダに対してRest Position(静止位置)を記録するために使用することができる“rest”というフィールドを追加します。
Scale Rest Res
Restフィールドの解像度をスケールします。解像度の低いRestフィールドを使用すると、メモリ使用量が少なくなり、さらにRestフィールドを硬くします。
Velocity Sampling
Velocityフィールドのサンプリングパターンを制御します。
Center
高速ですが精度が悪いGauss Seidel反復を使用します。
Face
遅いですが精度が良いPCGメソッドを使用します。
メニュー内の他の選択項目は、Vector field DOPと同じです。
Position Data Path
Positionデータのオプションの相対パス。
このパスは流体ボックスのトランスフォームに使用され、各軸に平行でない流体シミュレーションが可能になります。
../Position
の値は、Position DOPを流体オブジェクトに追加して、流体の向きを変更することができます。
Fields ¶
未使用フィールドのメモリ使用量が最小になるように試みる時、いくつかの応用で、作成された追加フィールドの数を最小限にする必要があります。 各フィールドは、このリストから無効にすることができます。
Note
SmokeとPyroのソルバでは、それらのフィールドが見つからない場合に、それらのフィールドの動作が停止していることを必要とする場合があります。
Tip
Heat フィールドは、Smoke SolverとPyro Solverで操作します。Heatフィールドを現行のソースマスクまたはBurnフィールドでスタンプすることができます。 そして、Heatフィールドは、受動的に流体と一緒に動き、時間と共に線形的に衰退します。
Heat フィールドは、“このボクセルがシステムに追加されてからの時間”と考えることができますが、Heatフィールドは、ボクセルが追加された時に1として開始し、ユーザが指定した秒数の後に0に衰退します。
Slice ¶
Slice
使用するスライス。この値の範囲は、0からスライスの数-1までの値です。
Slice Divisions
各軸方向にボリュームを切断する破片の数。 その作成される破片(スライス)の合計数は、これらの値を乗算した値になります。例えば、2,3,4は24個のスライスを作成します。
Overlap Voxels Negative, Positive
スライスの上下側に余白を追加します。 スライスは均等に分割され始めますが、このオーバーラップ(重なり)によって、それらのスライスが隣接するスライスと重なります。 フィールド交換ノードは、このオーバーラップを使用して、通信するものを決めます。
出力 ¶
First
このノードで作成されたSmokeオブジェクト。
ローカル変数 ¶
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単位分移動させます。
Examples ¶
2dfluid Example for Smoke Object dynamics node
2D流体をCOPにエクスポートして、それを画像シーケンスファイルとしてディスクに保存し、それをテクスチャマップ、変位マップなどに使う方法を説明しています。
DelayedSmokeHandoff Example for Smoke Object dynamics node
このサンプルでは、RBDオブジェクトが何かに当たった数フレーム後に、RBDを煙に変換する方法を説明しています。
Open CL smoke Example for Smoke Object dynamics node
GPUアクセラレーションのSmokeシミュレーションを最適化する上で、最初にテストで使用できる単純なOpen CLアクセラレーションのSmokeシミュレーションの使い方を説明しています。 Smoke SolverのUse OpenCLパラメータを参照してください。
高速化するには、システムはビデオカードへ、またはビデオカードからのコピーを最低限にする必要があります。 このサンプルでは、コピーを最低限にするための方法をいくつか説明しています。
-
DOPのキャッシュ化をオフにします。キャッシュ化は、フレーム毎にフィールド すべて をコピーする必要があります。これは、スクラブとランダムフィールドを検査する時に役に立ちますが、速度を速くするのには不要です。
-
SOPのDensityのみをインポートします。つまり、フレーム毎にGPUからCPUに1個のフィールドのみをコピーします。
-
バックグラウンドでディスクに保存します。これは、スループットを良くします。
-
シンプルなSmoke Solverを使います。
ビューポートでシミュレーションした出力の表示には、GPU → CPU → GPUの往復が必要ですが、これは、一般的には、ディスプレイカード以外のカードでのシミュレーションをサポートするのに必要です。
RBDtoSmokeHandoff Example for Smoke Object dynamics node
このサンプルでは、RBDオブジェクトをSmokeに変換する方法を説明しています。 同じSmokeオブジェクト内で複数の異なる色のSmokeフィールドを使っています。
SourceVorticlesAndCollision Example for Smoke Object dynamics node
このサンプルでは、Smoke Source、キーフレームを打ったRBDオブジェクト、Gas Vorticle Geometryなどを使って、単純なSmokeシステムを説明しています。
rbdsmokesource Example for Smoke Object dynamics node
ぼんやりとした四面体がボックス内を跳ね回って、その煙の連続的な放出で臨場感を出しています。
See also |