Houdini 19.0 Pyro

Sparse vs Denseシミュレーション

On this page

シミュレーション領域

シミュレーション中の任意の時点では、Pyroのフィールドは、現在の コンテナ 内に定義されています。 Pyroコンテナは、非常に小さく開始し、シミュレーションが進むにつれて、Pyro Solverは継続的にPyroコンテナを拡大/縮小します。 内部的なサイズ変更を実行するために、Pyro Solverは、指定された Reference Fields を追跡します。追跡するフィールドは、 Advanced ▸ Resizing タブで設定することができます。 例えば、デフォルト設定のdensity flameだと、Pyro Solverは、シミュレーション領域に煙や炎のすべての空間が含まれるようにします。 サイズ変更の具体的な例に関しては、以下のサイズ変更を理解するセクションを参照してください。

Note

Smoke ObjectGuides タブの Visualization サブタブで有効にしたオプションに該当するサブタブ内の Bounding Box チェックボックスを有効にすることで、 シミュレーションコンテナの領域を確認することができます。

Pyro Solverは、 Sparse モードまたは Dense モードのどちらでも動作することができます。

  • Dense モードでは、コンテナ全体がシミュレーションされます。これは、ガスがシミュレーションコンテナ全体を占有する場合、または、可視の煙が存在する領域を超えたVelocity値が必要な場合に役立ちます。

  • Sparse モードでは、コンテナの アクティブ なサブセット内でのみシミュレーションが実行されます。通常では、興味のある領域にのみ処理の重い計算が実行されるので、このモードの方が非常に効率的です。 しかし、いくつか制限事項があります。詳細は、Sparse計算セクションを参照してください。

Note

Houdini 18以前では、PyroシミュレーションはDenseモードでしか実行できませんでした。

Sparse計算

Pyro Solverとオブジェクトがどちらとも Enable Sparse Solving が有効になっていれば、Pyro SolverはSparseモードで動作します。 このパラメータは、オブジェクトの Properties タブ、Pyro Solverの Advanced ▸ Sparsity タブにあります。 このパラメータはどちらともデフォルトで有効になっているので、明示的にDenseモードを指定しない限りは、シミュレーションはSparseモードで実行されます。

他の唯一の条件は、シミュレーションフィールドのすべてのサイズ変更をフルタイル(この概念は後で説明します)で実行しなければならないことです。 Houdini 18の時点では、外部によるサイズ変更は、Volume Source DOPによって、ソース設定時に実行する必要があります。 そのため、そのVolume Source DOPノードの Enlarge Fields to Contain Sources を有効にしたら、 Enlarge by Full Tiles も有効にしなければなりません。

Note

2DシミュレーションとOpenCLは、Sparseモードに対応していません。

互換性のないSparseモード設定がオブジェクトやソルバで検出されると、エラーが発生します。 しかし、ソルバは外部によるサイズ変更に気づかないので、必ずフルタイルを有効にしてください。

Sparseモードでは、オブジェクトのactiveマスクフィールドには、シミュレーション領域が格納されます。 このフィールドの1は、ソルバでシミュレーションされる領域に相当し、0は非アクティブな領域に相当します。 activeフィールドは、流体と新しいソースの動きを考慮できるようにタイムステップ毎に再構築されます。 この実際の挙動に関する情報は、以下のサイズ変更を理解するを参照してください。

メモ

  • Gas Build Occupancy Maskノードは、activeフィールドの構築を管理します。

  • Smoke Objectの Guides タブの Visualization サブタブの Active Region チェックボックスを有効にすることで、シミュレーション領域を確認することができます。

  • Sparseモードでの非アクティブ領域は、煙が自由に移動する真空として扱われます。そのため、お互いに向かって吹いている2つの煙があると、これらのアクティブ領域がマージするのに十分に近い間隔にならない限りは、これらの2つの煙は互いに完全に見えなくなります。

フルタイル

効率を上げるために、アクティブ領域は フルタイル の状態にします。 フルタイルは、16x16x16の塊のボクセルで、フルタイルの境界は、固定のままでなければなりません。 そのため、ソルバ外で実行されるサイズ変更はフルタイルで処理することが非常に重要です。

ステンシル処理

Sparseモードで動作させると、Pyro Solverは、すべての内部工程を疎ボリュームで実行するようにします。 しかし、ネットワーク内の他のマイクロソルバ(例えば、Gas Disturb)は、余計な処理を回避するために、activeフィールドを ステンシル として使用する必要があります。 特に、ノードに Stencil Field パラメータがあれば、それを必ずactiveに設定してください。 stencilフィールドを指定すると、そのステンシル値が0.5を超えたボクセルのみにオペレーションが適用されます。 Sparse Pyroシミュレーションのコンテキストでは、activeフィールドをstencilとして使用することは、そのノードの処理は、必要な箇所でのみ実行されることを意味します。

Note

新しく接続したマイクロソルバが興味のある領域のみで動作できるように、 Stencil Field パラメータのデフォルト値はactiveに設定されています。

Note

activeフィールドは、Pyro Solverの Forces 入力に接続すれば更新されます。 ステンシルが有効になったマイクロソルバは、 Forces 入力に接続してください。

サイズ変更を理解する

Pyro SolverAdvanced ▸ Resizing タブのパラメータには、シミュレーション領域の決定方法を指定します。 特に、この目的は、 Reference Fields のゼロ以外の領域を追跡する事と( Padding で指定されたとおりに)その領域に十分な大きさのバッファを用意することです。 Denseモードでは、 Reference Fields のゼロ以外のボクセルから境界ボックスを計算し、その境界ボックスのすべての面を Padding だけ膨張させます。Sparseモードでは、 Reference Fields のゼロ以外のボクセルから境界ボックスを計算し、その境界ボックス内でアクティブ領域を見つけてから、その結果の領域を Padding だけ膨張させます。

サイズ変更の処理の工程を以下のテーブルで説明します。 以下の図の背景グリッドは、タイル境界を示しています。

Note

この例では、簡略化して2Dで表示しています。しかし、2DシミュレーションではSparseモードは動作しません。

工程

結果

シミュレーションを開始。 初期コンテナは小さくて空っぽです。

ソースを設定します。 Volume Sourceは、 Enlarge Fields to Contain Sources が有効になっていると、ソースの一部としてdensityフィールドのサイズを変更します。 Enlarge by Full Tiles も有効になっていれば、このフィールドの新しい境界はタイルグリッドにも一致します。

境界フィールド。 Reference Fields (densityに設定)のゼロ以外のボクセルから境界ボックスを計算します。この境界ボックスは画像では青いボックスで表現しています。

余裕代を追加。 ここまで計算した境界ボックスのすべての面を Padding だけ広げます。 Pyro SolverがSparseモードでない、且つ Resize in Full Tiles が無効になっている場合、 この青い領域は新しいコンテナ境界を形成し、これ以降の工程は実行されません。

タイル境界にスナップ。 ここまで計算した境界ボックスの壁をタイル境界にスナップさせて、 新しいシミュレーションコンテナを形成します。Pyro SolverがSparseモードでない、且つ、 Resize in Full Tiles が有効になっている場合、 これ以降の工程は実行されません。

アクティブタイルを検索。 新しいシミュレーションコンテナ内でアクティブタイルが検索されます。 Reference Fields で指定されたフィールドのどれかがゼロでなければ、そのタイルがアクティブであるとみなされます。 これらのアクティブタイルは、画像内の青いシェーディングボックスで表現しています。

余裕代だけ膨張。 ここまで計算したアクティブ領域を Padding だけ膨張させます。activeフィールドは、この工程の結果に一致します。

Pyro

Sparse(疎)Pyro

レガシーPyro