On this page | |
Since | 18.0 |
パラメータを使って異なる炎や煙のルックを表現する方法に関する情報は、Pyroのルックデブを参照してください。
Smoke Solverは、煙のシミュレーションに必要な基本的な工程を実行することができます。 Pyro Solver (Sparse)は、炎のシミュレーションとさらに形状コントロールを追加して、このソルバの機能を拡張しています。
セットアップ ¶
煙のシミュレーションに不可欠なビルディングブロックは、オブジェクト、ソルバ、ソースです。 Smoke Object (Sparse)ノードは、シミュレーションを進める時にソルバによって進展させるのに必須となるフィールドが入ったダイナミクスオブジェクトを作成します。 最も単純な煙のシミュレーションには、以下のデータが必要です:
-
煙が存在する箇所とその量を示す
density
スカラーフィールド。 -
浮力計算に使用する
temperature
スカラーフィールド。 -
煙の瞬間的な動きを取り込む
vel
ベクトルフィールド。
このソルバは、煙に見合った方法でこれらのフィールドを進展させる役割を担うのに対して、ソース設定は、そのシミュレーションの流れに沿ってこれらの量を注入する役割を担います。
例えば、煤煙(すす)ソースのdensity
またはtemperature
を次々と追加して熱い領域を発生させたいことでしょう。
詳細は、Pyroソーシングを参照してください。
Note
Sparse Pyro FX シェルフ下のツール群を使用することで、Pyro Solverを含んだセットアップを作成することができます。
Sparsity(疎ら) ¶
デフォルトでは、このソルバは Sparse モードで動作します。
つまり、active
フィールドで制御された興味のある領域にのみソルバで必要な計算が実行されます。
この領域は、 Advanced タブの Resizing サブタブ下にある Reference Fields パラメータによって構築されます。
このパラメータで指定されたフィールドのプラス領域が アクティブ としてフラグが立ちます。
次に、煙を広げるためのバッファを確保するために、この中間アクティブ領域を広げます。
例えば、 Reference Fields にdensity
を設定すると、このソルバは、煤煙(すす)が存在する領域とその周辺領域で処理を実行するようになるので、煙の可視領域に計算負荷を集中させることができます。
Sparseモードでの非アクティブ領域は、煙が自由に移動する真空として扱われます。そのため、お互いに向かって吹いている2つの煙があると、これらのアクティブ領域がマージするのに十分に近い間隔にならない限りは、これらの2つの煙は互いに完全に見えなくなります。
Advanced タブの Sparsity サブタブ下にある Enable Sparse Solving チェックボックスを無効にすると、 このソルバは Dense モードで動作するようになって、コンテナ全体で計算が行なわれます。 さきほどの2つの煙を例にすると、これらの煙は即座にお互いの存在に気づくようになります。 しかし、Denseモードは、いくつかのケースでは大幅に遅くなってしまいます。
Tip
Smoke Objectの Guides タブの Visualization サブタブ下にある Active Region チェックボックスを有効にすることで、アクティブなシミュレーション領域を表示することができます。
入力 ¶
Objects
動作させるSmoke Object。
Note
Sparseモードで動作させる時は、そのSmoke Objectの Enable Sparse Solving を必ず有効にしてください。
Advection
この入力に接続されたノードは、煙の正確なVelocityフィールドを使用することができるようになります。 例えば、Gas Advectノードを接続することで、そこに取り付けたジオメトリデータのポイントを煙に沿って移流させることができます。
Note
この入力を介してVelocityを変更するのは安全ではありません。 代わりに、 Sourcing または Forces の入力を使用してください。
Sourcing
この入力を使ってシミュレーションフィールドを変更します。 例えば、Volume Sourceを接続してソースを設定します。 この入力を介してSparseモードでアクティブ領域に影響を与えるソース設定を実行することが重要です。
Note
この時点でのactive
フィールドは最新ではありません。
そのため、Sparseモードで操作を実行できるようにしたいのであれば、 Forces 入力を使用してください。
Forces
この入力に接続されたマイクロソルバは、最終Pressure Projectionの前に実行されます。
この時点でのactive
フィールドは、 Stencil Field に対応したDOPsのステンシルとして使用することができます。
Note
この入力に接続されたノードを実行する前に、 Sourcing 入力で実行された処理を考慮してactive
フィールドが更新されます。
パラメータ ¶
Simulation ¶
Calculate Speed Field
有効にすると、タイムステップ毎にspeed
フィールドが計算されます。
このフィールドには、Velocityベクトルの長さが格納され、コントロールフィールドとして使用することで、取り付けられたマイクロソルバとシェイプオペレータの強さを減衰させることができます。
例えば、speed
をコントロールフィールドとして使用することで、動きの少ない領域の乱流効果を弱くすることができます。
Note
speed
は移流の後、且つ、フォース適用前に計算されます。
Time Scale
このソルバ内部の時間に対するスケール係数。
1
は通常速度で、1
より大きいスケールはシミュレーションを速く、1
未満のスケールはシミュレーションを遅くします。
Viscosity
Velocityフィールドに対するブラー係数。
0
の値は、隣接ボクセルを抵抗なしで異なる方向に移動させることができるので、より混沌とした乱流のルックが生成されます。
このパラメータの値が大きいほど、より一貫としたVelocityフィールドになるので、より流れるようなルックが生成されます。
Wind
受動風のVelocity。 このフォースは移流によって別に扱われるので、 シミュレーションVelocityフィールドは、この Wind の存在を反映しません。
Advection-Reflection ¶
Advection-Reflection
Advection-Reflectionは、Pressure Projectionが原因で失われたエネルギーをシミュレーションに注入することを試みます。 このオプションを有効にすると、流れの中の渦をもっとうまく維持させることができます。
Disabled
Advection-Reflectionを実行しません。 これは、爆発といった非ゼロのGoal Divergenceを伴うシミュレーションで推奨されている設定です。
Single-Project
タイムステップ毎にPressure Projectionを1回実行して、それによって除去されたVelocityコンポーネントを次のステップで追加します。 このオプションは、 Disabled よりも若干遅く、さらに、追加のベクトルフィールドをタイムステップ間で取り込む必要があります。
Double-Project
タイムステップ毎に2回のPressure ProjectionとVelocity移流パスを実行します。 このオプションは、 Single-Project よりもかなり遅いのですが、もっと良い結果と安定性を得ることができます。
Reflection Amount
Advection-Reflection が Disabled に設定されていない時に再注入されるPressre ProjectionされたVelocityの割合。 1に近い値ほど、エネルギーがもっとうまく維持されますが、不安定になる可能性があります。
以下の動画は Single-Project モードを示しています。
以下の動画は Double-Project モードを示しています。
Temperature ¶
Temperature Diffusion
temperature
フィールドに対するブラー係数。
値が大きいほど、温度がもっと拡散するようになって、熱い領域から冷たい領域への熱の広がりを模倣することができます。
Cooling Rate
temperature
フィールドがゼロに冷却される速さ。
Ambient Temp (K)
temperature
フィールドの0の値に相当する温度(単位はKelvin)。
これは、環境の周辺温度を表現します。
Reference Temp (K)
temperature
フィールドの1の値に相当する温度(単位はKelvin)。
これらの温度の範囲を使って、浮力が計算されます。
Note
一般的に、temperature
フィールドのT
値は、Ambient Temp (K) + T * (Reference Temp (K) - Ambient Temp (K))
の温度に相当します。
Buoyancy Scale
高温のガスは、膨張し、密度の低下によって上昇します。 浮力による加速度は、 Ambient Temp (K) と Reference Temp (K) の値、さらに Gravity 設定を使って計算されます。 このパラメータの値は、その浮力に対する乗数として使用されます。
Gravity ¶
Gravity Acceleration
重力による加速度。 重力が強いほど、浮力が強くなります。
Gravity Direction
重力が引っ張る方向。 熱いガスほど、これと反対の方向に上昇する傾向があります。
Advanced ¶
Minimal Solve
評価ネットワークの特定の部分を無効にして、メインメモリとビデオメモリ間のデータコピーを回避する高速なOpenCL計算を容易にします。
Warning
これは、 Minimal OpenCL Solve を実装するためにPyro Solver SOPで使用されるユーティリティパラメータです。 しかし、この機能は、正しく動作させるにはいくつかの可動パーツに依存しています。 そのため、Smoke Solver (Sparse)またはPyro Solver (Sparse)のノード上でこのパラメータの値のロック解除も変更もしないでください。
Use OpenCL
OpenCLデバイスを使って計算を高速化します。
Note
現在のところ、OpenCLアクセラレーションは Dense モード( Enable Sparse Solving が無効な時)にのみ対応しています。
Min Substeps
ソルバは、フレームあたり少なくともこの数のサブステップを実行します。 異常なフォースが発生した場合、このパラメータを上げることで、安定性が増します。 通常では、このパラメータを上げると、シミュレーションの実行が非常に遅くなります。
Max Substeps
ソルバは、フレームあたり最大でこの数のサブステップを実行します。
CFL Condition
Max Substeps が1
より大きい時、ソルバは、このパラメータを使用してサブステップの数を決めます。
この条件は、サブステップがオブジェクトをこれより多くのボクセルで相互に貫通することができない事です。
値が高いほど、ソルバはもっと大きくサブステップを取得することができるので、煙がColliderを通過してしまう可能性があります。
Quantize to Max Substeps
有効にすると、すべてのサブステップは、1フレームを Max Substeps で割ります。 例えば、 Max Substeps を4に設定し、 CFL Condition が3サブステップだけ必要であれば、 ソルバは0.25, 0.5, 0.25のフレームステップを受け取ります。 このオプションは、 1/Max Substeps の増分値でファイルにキャッシュ化した入力ジオメトリを再利用するのに役に立ちます。
Frames Before Solve
オブジェクトを作成した後に、実際のシミュレーションをこの数のフレームだけ遅らせます。 Sourcing 入力に接続されたノードは、その間でも実行されます。 これは、いくつかのSolveノードが特定の初期条件を満たす前に処理できない場合に必要になることがあります。
Single V-Cycle for Pressure Projection
有効にすると、非常に処理の軽い(しかし精度が落ちる)メソッドを使用してPressure Projectionが実行されます。
Resizing ¶
Resize in Full Tiles
有効にすると、16ボクセル単位でフィールドのサイズが変更されます。 これにより、若干効率が良くなりますが、その結果のフィールドは必要以上に大きくなります。
Note
Enable Sparse Solving が有効な時は、サイズ変更は必ずフルタイルで実行されます。
Reference Fields
シミュレーションコンテナのサイズを決めるフィールドのリスト。 まず最初に Reference Fields からプラス値のすべてのボクセルを含んだ境界ボックスを計算し、次にその境界ボックスを Padding だけ広げることで、サイズ変更が行なわれます。 このフィールドのリストは、Sparseモードでアクティブ領域を構築する際にも使用されます。
Padding
Reference Fields のシミュレーション領域に追加する余裕代。 Padding はできるだけ小さく、タイムステップ内で煙がコンテナからはみ出さない程度に十分な大きさにしてください。
Note
Enable Sparse Solving が有効な時、 Padding は、アクティブ領域に構築されるバッファのサイズも制御します。
Extra Fields
デフォルトでは、このソルバは、density
、temperature
、divergence
、active
、vel
、collisionvel
、flame
(Pyroのみ)のサイズを変更します。
ここにフィールドを指定することで、そのフィールドのサイズも変更させることができます。
Sparsity ¶
Enable Sparse Solving
ソルバを Sparse モードにして、関連する領域のみを計算するように実行させることができます。
Note
Sparse モードを正しく動作させるには、必ずSmoke Objectの Enable Sparse Solving も有効にしてください。
Reset Rule
Fields to Reset で指定されたフィールドの変更箇所を決めるルール。
Disabled
フィールドのどの箇所も変更されません。
Newly Occupied
以前は非アクティブで今はアクティブな領域のフィールドがリセットされます。
Newly Deoccupied
以前はアクティブで今は非アクティブな領域のフィールドがリセットされます。
Newly Occupied or Deoccupied
アクティブから非アクティブ、非アクティブからアクティブに変わった領域のフィールドがリセットされます。
Fields to Reset
Reset Rule に基づいてリセットするフィールドのリスト。 変更される箇所の領域では、これらのフィールドは初期値に設定されます。
Extrapolate Velocity into New Tiles
このパラメータを有効にすると、新しくアクティブになった領域が近接のアクティブ領域からVelocityを継承します。 これは、 Padding が十分大きくない場合に煙の表面上に現れるタイル状の乱れを軽減させることができます。
Falloff パラメータと Blendwidth パラメータは、新しいVelocityと(Smoke Object (Sparse)ノードの Wind Tunnel Direction で設定した)背景フィールド値のブレンド方法を決めます。 アクティブ領域周辺に補間帯域が反映されるように Blendwidth を設定してください: 有効な境界Velocityは、この厚みの帯域内の背景値とブレンドされます。 Blendwidth を小さくしすぎると、この外挿はタイル状の乱れを軽減するには効果が出なくなります。 かといって、この値を大きくしすぎると、煙は外側へ加速するようになります。 それが起きたら、 Blendwidth を下げるか、または、(シミュレーション速度の命令の値まで) Falloff を上げることで、その問題を軽減することができます。
Falloff
Extrapolate Velocity into New Tiles を有効にすると、有効なVelocity値が新しくアクティブにあった近接タイルまで外挿されます。 このパラメータは、(Smoke Object (Sparse)ノードの Wind Tunnel Direction で設定した)背景フィールド値までの最小ブレンドレートを設定します。 希望する Blendwidth において煙が外側に引っ張られている場合は、このパラメータを上げてください。
Blendwidth
Extrapolate Velocity into New Active Tiles が有効な時にアクティブ領域周辺の補間帯域のサイズを制御します。 このサイズの帯域内にある新しくアクティブになったVelocityは、有効な値を( Wind Tunnel Direction で設定した)背景フィールド値まで補間されます。 このパラメータを上げることで、 Padding が小さい時に発生し得るタイル状の乱れを軽減することができます。
Note
実際のBlendwidthは、このパラメータと Padding の積となります。 そのため、 Padding の量を大きく変更した場合は、このパラメータの値も調整する必要性が出てきます。
Expand by Velocity
有効にすると、アクティブなシミュレーション領域がガスの動きを考慮するようになります。 これによって、流体がより速い速度で出ていく箇所の Padding が大きくなるように最適化されます。 これを無効にすると、アクティブ領域は全方向均一に広がります。
Min Padding
Expand by Velocity を有効にした時の煙周辺の最小余裕代。
Max Padding
Expand by Velocity を有効にした時の煙周辺の最大余裕代。 これを有効にすることで、 Expand by Velocity を使用した時の内部の膨張量を制限することができます。
Note
Max Padding が Resizing タブの Padding よりも小さい場合、 その Padding は内部的に Max Padding (有効な時)にクランプされます。 これは、境界に非アクティブなタイルの層ができないようにするために行なわれます。
Expansion Rate
Expand by Velocity を有効にした時に、Sparseアクティブ領域の最適なPaddingサイズを制御します。 このパラメータの値が大きく設定すると、アクティブ領域に多くのタイルが含まれるようになります(そして、煙が流れていくバッファが大きくなります)。
Tangential Rate
このパラメータは、 Expand by Velocity を使用した時のSparseアクティブ領域の形状に影響を与えます。 このパラメータの値を小さくすると、アクティブ領域内の鋭いよじれが許容されるようになります。 これによってアクティブなシミュレーションタイルの数を削減することができるものの、流体の動きに悪影響を及ぼす可能性があります。
External Forces ¶
Scaled Forces
各ボクセルのdensity
フィールドの値でスケールをかけるフォースのリスト。
Absolute Forces
(density
値を無視して)すべてのボクセルに均一に適用するフォースのリスト。
Advection ¶
Field Advection ¶
Advection Scheme
移流を実行する際に使用するアルゴリズム。 Semi-Lagrangian が最も基本的なアルゴリズムです: これは、一回だけ Velocity Field を通過した軌跡を追跡してその Field 値を更新するだけです。 Modified MacCormack は、さらに追加で追跡ステップを実行して、取り込まれた誤差を近似して補正します。 その結果として、オリジナルのフィールドの鮮明な特徴部をもっと上手く維持することができます。 BFECC は、最も計算負荷が高いですが、さらに他の追跡ステップを実行して、推定誤差の動きを予測して、一番良い結果を生成します。
Clamp Values
Modified MacCormack と BFECC の移流の誤差補正ステップは、オリジナルのフィールドの範囲外にある最終ボクセル値を取り込んでしまう可能性があります: これでは、例えばマイナスの密度または大きなVelocityを生成してしまう可能性があります。 そのような値が検出されたら、最終フィールド値は、このパラメータの設定に基づきます。
None
クランプを実行しません。
Clamp
Semi-Lagrangian の移流メソッドで確認された範囲内に収まるように値をクランプします。
Revert
Semi-Lagrangian の移流メソッドで予測された値に戻します。
Blend
移流させたフィールドがクランプ制限に到達した時に、クランプしていない値とクランプした値の間に滑らかなブレンドを適用します。 特に Revert オプションを使用した場合、小さい値の Blend (0.05-0.1)を適用することで、移流させたフィールド内のグリッド状の乱れを軽減させることができます。
Trace Method
Velocityフィールドを通過する軌跡を追跡する方法を制御します。 このメニュー内のオプションは、精度と計算負荷の低い順でリストされています。
Note
CFL Condition に適切な値を使用していれば、 Forward Euler で十分なはずです。 CFL Condition にもっと大きな値を使用する必要がある場合、または、そのオプションを無効にした場合は、 Trace Method からもっと下にリストされているオプションの使用を考慮してください。
CFL Condition
有効にすると、計算された経路が Velocity Field 内のバリエーションを反映できるようにするステップ内で軌跡の追跡が行なわれます。 ステップサイズは、このパラメータの値で制御されます。 特に、各ステップ内で通過したフィールドボクセルの数は、 CFL Condition と同じです。
Max Steps
軌跡を追跡する際に考慮されるステップ数に安全のための上限を設定します。
Note
Use Field Advection Settings for Velocity が無効になっていても、このステップ数の制限は常にVelocity移流にも適用されます。
Max Batch Size
Velocity Field を通過する経路を追跡する負荷を最小限に抑えるために、ターゲットのフィールドを(それらのボクセルサンプリング設定に基づいて)束にまとめて、それぞれの束を同時に移流させます。 このオプションを有効にして Max Batch Size を指定することで、それぞれの束で処理可能なフィールドの数を制限することができます。 これは、移流ステップがピークに達するメモリ使用量を削減するのに役立ちます。
Note
Use Field Advection Settings for Velocity が無効になっていても、このバッチ設定は常にVelocity移流にも適用されます。
Extra Fields
デフォルトでは、このソルバは、density
、temperature
、vel
、flame
(Pyroのみ)を移流させます。
ここにフィールドを指定することで、そのフィールドも移流させることができます。
Velocity Advection ¶
Use Field Advection Settings for Velocity
有効にすると、さらに Field Advection 設定も使って、Velocityフィールドを移流させます。 このオプションを無効にすると、Velocity用の移流設定を変更することができます。
このセクションの残りの設定は、 Field Advection に載せている設定と同じです。
Collisions ¶
Build Collision Mask
このオプションを有効にすると、ソルバはcollision
フィールドとcollisionvel
フィールドを構築して、煙と衝突オブジェクト間に自動的な相互作用を機能させます。
Bandwidth
コリジョンオブジェクトからどれだけ離れた距離までそれに関連するフィールドを構築するかどうかを制御します。 この値の単位はボクセルです。 これを無効にすると、これらのフィールドのすべての箇所が初期化されます。
Use Point Velocity for Collisions
アフェクターオブジェクトのローカルVelocityは、角速度と線形速度の組み合わせです。 しかし、オブジェクトが変形、且つ、フレーム間でポイントが合致している場合、そのローカルのポイントVelocityも使用して、その変形エフェクトを推定することができます。
Use Volume Velocity for Collisions
アフェクターオブジェクトのポイント数が変化するのであれば、それをボリューム表現にすることで、そのボリューム表現内の変化を変形Velocityの推定に使用することができます。
Note
これには、ボリュームサーフェスの接線方向のVelocityが含まれていません。 ボリュームがフレーム間で変化しなければ、ベルトコンベアーが静止しているように見えます。
Collide with Non-SDF
通常では、コリジョンリレーションシップは、オブジェクト毎に符号付き距離フィールドを使用します。
しかし、オブジェクトが異なるタイプの場合、他の方法を使って実質的に符号付き距離フィールドを取得することができます。
このオプションを有効にすると、オブジェクトのsurface
スカラーフィールドが検査されて、それが符号付き距離フィールドとして扱われます。
density
フィールドが存在すれば、それを0.5のカットオフでFogボリュームとして扱われます。
Geometry
ジオメトリが取り付けられていて、且つ、そのジオメトリが単一ボリュームで構成されている場合、
そのボリュームが(0.5のカットオフで)Fogボリュームとして扱われます。
しかし、そのボリュームの境界条件がSDFに設定されていれば、SDFとして扱われます。
Correct Collisions
有効にすると、Collider内の指定したフィールドがリセットされます。
Fields to Correct
Correct Collisions が有効な時、Collider内のこれらのフィールドがリセットされます。
Feedback Scale
Colliderが煙から影響を受ける度合いは、このパラメータの値で制御します。 値が大きいほど、Colliderに対する圧力の影響が強くなります。 0の値は、どのフィードバックも回避されます。
IOP Iterations
Colliderは、弱連成法(Weak Coupling)を使ったシステムに統合されています。 射影の反復回数は、このパラメータで制御します。 反復回数が多いほど、シミュレーションが遅くなりますが、コリジョンオブジェクトとの相互作用が良くなります。
Note
IOPとは Iterated Orthogonal Projections (反復直交投影)の略です。 このメソッドは、まず最初に(規定の発散を無視しつつ)Colliderと互換性のあるVelocityフィールドを作成してから、(コリジョンオブジェクトを考慮せずに)目的の発散に合わせることで、動作します。 これらの工程が十分な回数だけ繰り返されると、その結果のVelocityフィールドは目的の発散になってColliderを評価するようになります。
Hourglass Filtering ¶
Filter Hourglass Modes
Smoke Objectの Velocity Sampling が Center に設定されている時、Pressure Projectionに耐えることができる疑似Divergenceモードのフィルタリングを有効にします。
Amount
Hourglassフィルタリングの強度。
0
の値は、このフィルタリングを無効にするのに対して、1
の値は、フルフィルタリングを実行します。
Scale by Divergence
このオプションを有効にすることで、どこにでもフィルタリングを実行するのではなくて、Divergenceがまだ検出されている箇所のボクセルに対して選択的にフィルタリングを適用することができます。
Use Relative Divergence
Scale by Divergence と同様で、この設定は場所によって異なる強度でフィルタリングを適用します。 しかし、純粋なDivergenceではなく、フィルタリング強度の制御に使用される量は、Divergence/速度の比率です。
Divergence Scale
残りのDivergenceに対するフィルター強度の感度( Use Relative Divergence が有効な場合は、Divergence/速度)を制御します。 つまり、それに関連する量をこの量で乗算した後に、その値を使ってフィルター強度を決定します。
Visualize Filter Strength
適応フィルターを使用した時( Scale by Divergence が有効になっている時)、このオプションを有効にすることで、強度フィールドを視覚化することができます。
Plane Orientation
視覚化する切断平面の向き。
Plane Position
境界ボックス内の切断平面の相対位置。
Visualization Mode
強度の値(0
から1
)をカラーに変換する方法を決めます。
See also |