Houdini 19.0 Pyro

Pyroの挙動を理解する

On this page

シミュレーションフィールド

Pyroは、単なるボリューム流体ソルバです: Pyro流体の状態を表現したデータには、様々なスカラーフィールドとベクトルフィールドがあります。 Smoke Objectは、これらのフィールドの作成を管理します。このノードには、シミュレーション中にそれらのフィールドを視覚化するための豊富なオプションが備わっています。

  • velベクトルフィールドには、流体の瞬間速度を格納します。煙の動きは、このVelocityフィールドによって制御されています。

  • densityスカラーフィールドは、目に見える煤煙(すす)の量を決定します。densityが高い領域ほど煙が濃く見えます。

  • temperatureスカラーフィールドは、熱の分布を決めます。熱いガスほど浮力で上昇する傾向があります。 このフィールドの値は正規化されたままにしておくことを推奨します(つまり、ソース値を0から1などの便宜的な上限の間にしてください)。 このフィールドの値の背後にある物理的な意味は、Pyro Solverの Ambient Temp (K) パラメータと Reference Temp (K) パラメータで制御します。

    これらのパラメータ値の単位は、Kelvinです。Kelvinと他の一般的な温度単位との変換式を以下のテーブルに載せます。

    Kelvinへ

    Kelvin(K)から

    摂氏温度:Degrees Celsius(C)

    C + 273.15

    K - 273.15

    華氏温度:Degrees Fahrenheit (F)

    (F - 32) * 5/9 + 273.15

    (K - 273.15) * 9/5 + 32

    Note

    temperatureの値は、冷却すると0まで下がり、物理的に周辺環境内の周辺温度に相当します。

  • flameスカラーフィールドには、反応物の残りの寿命を格納します。このフィールドの詳細な説明は、のページを参照してください。

  • divergenceスカラーフィールドは、目的の膨張と収縮を取り込みます。詳細は、以下のPressure Projectionセクションを参照してください。

  • pressureスカラーフィールドは、流体の内部圧力を含んだ補助スカラーフィールドです。このフィールドは、視覚化には役立ちますが、それ以外では役に立ちません。

  • collisionスカラーフィールドとcollisionvelベクトルフィールドには、それぞれColliderの有無、そのColliderのVelocityを示したマスクが入ります。 collisionフィールドは、Colliderで専有された領域がプラス値、それ以外がマイナス値です。 ColliderをPyroシミュレーションに追加する方法は、以下のColliderセクションを参照してください。

  • activeマスクフィールドは、ソルバをSparseモードで動作するように設定されている時に、アクティブなシミュレーション領域を取得します。 Sparseシミュレーションに関する情報は、Sparse vs Denseのヘルプのページを参照してください。

Pyro Solverの内部

Pyro Solverは、煙と同じ方法で上記で説明したシミュレーションフィールドを進展させます。 タイムステップ毎に、以下の工程がPyro Solverによって実行されます:

  1. temperatureを拡散して冷却します:

    拡散(Diffusion) とは、高温の領域から低温の領域への熱の伝達を意味し、 冷却 は、熱の放射損失を取り入れます。

  2. densitytemperatureflamevelを移流させます:

    移流(Advection) とは、流れによる流体量の輸送を意味します。 この工程は、すべての関連フィールドに動きを適用する役割を担います。

  3. flameフィールドの寿命を短くし、その出力を生成します:

    flameフィールドには、 反応物の残りの寿命 を格納します。この工程は、その反応物をシミュレーションします。 詳細は、のヘルプのページを参照してください。

  4. densityを消散します:

    消散(Dissipation) は、時間の経過とともに煙の密度を薄くして、徐々に煙を消します。

  5. ソース設定を実行します:

    Pyro Solverの Sourcing 入力を使用して、シミュレーションに(densitytemperatureなどの)新しい注入量を追加します。

  6. シミュレーションコンテナのサイズを変更します:

    サイズ変更 は、シミュレーション領域がタイムステップ内で動きを収容できるほどに十分な大きさでなければなりませんが、さらに不要な計算を回避できるほどに十分な小ささに抑えると良いでしょう。

    Note

    Pyro SolverをSparseモードで動作させた場合、この時点で、アクティブ領域も計算されます。 詳細は、サイズ変更を理解するセクションを参照してください。

  7. フォース系ノードを適用します:

    シミュレーションネットワーク内に(重力や風などの)何かしらの フォース系ノード が存在すれば、その効果がvelフィールドに適用されます。

  8. 浮力を適用します:

    高温のガスは希薄なので 浮力 によって上昇します。この効果は、temperatureフィールドで駆動されて、velに加算されます。

  9. 粘度をvelに組み込みます:

    粘度(Viscosity) とは、流体の動的な“厚み”を意味します。 粘度が高い流体ほど、混沌とした動きが少なくなる傾向があります。 例えば、蜂蜜は水よりも粘度が高いです。

  10. 形状決め処理を適用します:

    Pyro Solverには、煙の動きと出現する形状に影響を与える シェイプオペレータ がいくつか備わっています: Disturbance , Shredding , Turbulence 。 これらのシェイプを制御する方法に関しては、Pyroのワークフローを参照してください。

  11. カスタムフォースを適用します:

    Pyro Solverの Forces 入力にノードを接続することで、カスタムフォームを取り込むことができます。

  12. Pressure Projectionを実行します:

    圧力射影(Pressure Projection) は、シミュレーションで重要な工程です。 この工程によって、タイムステップの最後のvelフィールドを目標のDivergence(発散)で規定された膨張と収縮に一致させます。 この工程の詳細は、Pressure Projectionを参照してください。

Colliders

他のオブジェクトをColliderとしてPyroシミュレーションに追加することで、煙や炎をそのオブジェクトに相互作用させることができます。 これを行なう最も単純な方法は、Static Object(形状を移動も変更もしないCollider用)またはDeforming Object(動的なCollider用)を使用することです。 Collisions シェルフに配置されているツール群を使用することで、これらのオブジェクトを簡単に適用することができます。 これらのツールは、衝突検出とVelocityのサンプリングといったタスクを自動化します。 たいていの場合、Colliderのセットアップは、この方法で十分です。

Colliderを導入するもう1つの方法は、手動でcollisioncollisionvelのシミュレーションフィールドをソース設定することです。 この手法だと少し手間がかかりますが、コリジョンVelocityをもっと細かく制御することができます。 Populate Containers シェルフのCollide with Objectsツールを使用することで、この処理を効率化することができます。 もっと手動な方法で行ないたいのであれば、Pyro Solverの Forces 入力にVolume Sourceノードを接続することが重要です。

Note

SOPバージョンのPyro Solverは、これらの方法にどちらも対応しています。 Setup タブの Create From パラメータで、その2通りの方法のどれかを選択することができます。

ここで説明したColliderを追加する2通りの方法は、collisionフィールドとcollisionvelフィールドを構築するかどうかの違いしかありません。 衝突の実施そのものは、どちらの場合でも同じ方法で実行されます。 特に、Pressure Projectionステージは、ガスとCollider間の運動量の転送を仲介します。 これは、衝突の実施と射影パスを交互に行なうことで、実行されます。 Pyro SolverAdvanced ▸ Collisions タブの IOP Iterations パラメータは、この処理を繰り返す回数を制御します。 デフォルトでは、これは1回しか処理されませんが、Colliderが高速に動いたり、煙がColliderを貫通してしまっていた場合、 IOP Iterations の回数を上げることを考慮してください。

Pressure Projection(圧力射影)

Pressure Projectionは、流体シミュレーションの重要なステージです。 これは、流体とColliderを結合する役割、非圧縮性の流れに渦を発生させる役割、さらには、爆発のための突然の急速な膨張を引き起こす役割を担っています。

Note

Pyro Solverは、Gas Project Non-Divergent Multigrid DOPを使用してPressure Projectionを実行します。

Pressure Projectionを実行する時にdivergenceフィールドが考慮されます。 シミュレーションでdivergenceフィールドに何も加算されていない場合(つまり、divergenceフィールドが常にゼロのままである場合)、 その流れは 非圧縮性 もしくは Divergence-Free(発散なし) になります。 単純なVelocityフィールドをDivergence-Free(発散なし)にした結果は、以下のようになります。 初期段階では、円の領域以外のフィールドはどこもゼロで、Velocityが上方向を向いています。 Pressure Projectionは、その円の周辺にVelocityを加算して、その流れが円の領域を循環するように向かわせます。

直感的に言うと、divergenceフィールドのプラスの領域が膨張(外側を向いたVelocityベクトル)に相当し、マイナスの領域が“収縮”(内側を向いたVelocityベクトル)になります。 以下では、この説明を図解しています。

左側の図は、目標のdivergenceフィールドです: 赤い領域がプラス、青い領域がマイナス、緑の領域がゼロ領域を意味します。右側の図は、Pressure Projectionを実行した後の結果のベクトルです。

Sparse Fireballシェルフツールでは、divergenceフィールドを扱うためのお勧めの2つの方法が使われています。 その1つ目は、強力な起爆の役割を果たすために、直接ソース設定をしています。 その2つ目は、上昇する火の玉が爆発を続けられるように、flameフィールドもdivergenceに寄与させています。 これは、Pyro Solverの Flames タブにある Add Expansion を有効にすることで可能です。 flameフィールドの詳細は、のヘルプのページを参照してください。

Pyro

Sparse(疎)Pyro

レガシーPyro