Houdini 19.0 Pyro

Pyroのワークフロー

On this page

概要

Pyroシミュレーションの速度と出現形状は、たくさんのパラメータの組み合わせによって制御します。 このページでは、Pyroツールを使って効果的に作業して、色々なシミュレーションのルックを表現するためのTipsとテクニックを載せています。

始める前に、以下のヘルプページでは、より詳細なPyroの説明を載せています:

  • Pyroの紹介 - シミュレーションの色々なコンポーネントについて説明し、それに関連するノードを載せています。

  • Pyroの挙動を理解する - Pyroシミュレーションがどのように実行されるのかを大枠で説明しています。

  • Sparse vs Denseシミュレーション - Sparse Pyroシミュレーションに関する重要な情報を載せています。

  • - flameフィールドについて説明しています。

視覚化

試行錯誤の過程において、視覚化はシミュレーションフィールドの状態を調べるのに役立ちます。 Smoke Objectには、シミュレーションフィールドを視覚化するためのオプションがたくさん用意されています。 Scalar Field VisualizationVector Field Visualizationノードのヘルプには、利用可能な色々なオプションに関する詳細が説明されています。

一番役立つ視覚化モードは、 Multi Field です。 このモードは、レンダリング時に見受けられるようなすべてのボリュームを表示します。 Multi-Field Visualizationのヘルプには、それらのパラメータに関する情報が説明されています。 ルックに影響する最も重要な設定は、以下で説明しています。

Density Field

煙の濃さを表示するのに使用します。 ここにはdensityを設定してください。 煙をもっと濃く表示するには、 Density Scale を上げます。

Diffuse Field

煙に色を付ける際に使用します。 例えば、Sparse Fireballシェルフツールは、 Diffuse Fielddensityを、 Diffuse Ramp に単色を設定します。 結果として、視覚化された煙を暗い灰色にします。

Emission Field

発光に使用します。 シミュレーションの炎の部分が発光できるようにするには、ここにflameを設定してください。 Emission Scale は、発光量を制御します。 炎の境界をもっと鮮明にしたいのであれば、 Emit Range を有効にして、0.1-0.2などの狭い範囲を設定します。

Emission Color Field

発光のカラーを制御します。 ここにはtemperatureを設定してください。 Physical Blackbody モードでは、黒体放射モデルを使って、このtemperature値を発光のカラーと強度にマッピングします。

一般的なワークフロー

Pyro Solverの多くのパラメータは、シミュレーション結果に影響を与えます。 Pyro Solverのヘルプのページには、それらのパラメータに関するたくさんの役立つ情報が載っています。 しかし、膨大な数の設定に圧倒されてしまうのが目に見えます。 ルックデブの工程を一連のタスクに分割し、以前の設定からやり直す必要がないようにタスク別に詳細な補足説明を集中させた方が良いです。

  1. ソースジオメトリを作成する

  2. 基本的なシミュレーションパラメータを設定する

  3. 温度と浮力のパラメータを設定する

  4. flameフィールド関連のパラメータを設定する

  5. シェイプオペレータを調整する

上記のワークフローの各工程は、特定のタスクに焦点を当てており、それ以降の工程は、以前のステージから得られた結果に対して最低限の効果を設定しています。 そのため、各工程内の繰り返し処理は、比較的少ないパラメータセットに抑えられて、処理全体の繰り返しが最小限に維持されています。

Tip

2から5までの工程では、 Minimal OpenCL を有効にすることができます。 このパラメータは、Pyro Solver SOPSetup タブにあって、インタラクティブなリアルタイムシミュレーションのパフォーマンスが得られます。 詳細は、Minimal OpenCL Solveを参照してください。

ソースジオメトリ

ソースジオメトリは、新しく注入された煙の形状と挙動に大きな影響を与えます。 この工程では、最終結果の詳細について気にせずに、シミュレーションにいい感じのバリエーションを取り込めるようにソースを作成する事に集中します。

  • 静的な煙と炎のシミュレーションに関しては、ソース値にノイズを追加します。

    • Attribute Noise SOPを使用することで、ソースのPointアトリビュートにノイズを追加することができます。

    • 煙のシミュレーションの場合、このノイズによって、一定で面白くない放出が回避されます。

    • 炎のシミュレーション用のソースノイズは、ベースのルックを決めるのに重要です。炎のベースのルックに細胞状のノイズを取り入れるには、 Noise TypeWorley (cellular) F2-F1 にします。

  • 広がる炎を表現するには、Pyroシミュレーションを進める前に、ソースジオメトリが広がりの挙動の見た目になるようにしてください。

    • 特にPyro Source Spread SOPは、広がる炎のシミュレーション向けに設計されています。

  • 爆発に関しては、Pyro Burst Source SOPを使用することで、爆発の核心部となるソースを作成し、その爆発のルックの形を定義することができます。 さらに、Pyro Trail Path SOPとPyro Trail Source SOPを使用して軌跡を追加することもできます。 詳細は、爆発の作成を参照してください。

この工程では、ソース値、特にtemperatureflameのソース値の範囲も決定してください。 このために、Attribute Promote SOPを使用することで、(ラスター化する前の)関連するPointアトリビュートの最大値を計算することができます。 この情報は、後でPyro Solverのパラメータを設定するのに役立ちます。

基本的なシミュレーションパラメータ

ソース設定が完了したら、次の工程は、シミュレーションが正しく動作するように基本的なプロパティを設定することです。 これらの設定に妥当な値が使用されていた場合、おそらく一度設定したら、後は忘れてしまう可能性があります。

Smoke Object

Voxel Size

シミュレーション解像度を制御します。 値が 低い ほど、高解像度になります。 この値は、シミュレーションスケールに比例して設定してください。 例えば、デフォルト値の0.1は、ユニットサイズのベース形状の爆発には合理的な値です。 その一方で、爆発のベース形状のサイズが100ユニットだった場合は、 Voxel Size もそれに応じて大きくしてください。

Tip

高解像度のシミュレーションに移行する前に、大きなボクセルサイズを使うことで、色々なシミュレーション設定を素早く試すことができます。

Boundary Conditions

地面またはソリッドの壁をシミュレーションに追加する必要がある場合は、このセクション内のパラメータを使用します。

Tip

Guides ▸ Visualization タブの Domain 項目は、シミュレーションが実行される場所を調べるのに役立ちます。

Pyro Solver

Max Timesteps

Pyro Solverがフレーム毎に取得できるタイムステップの最大の数。 デフォルト値の1は、煙シミュレーションには十分なはずですが、シミュレーションする流体のVelocityが高速な場合には、この値を上げてください。

Padding

シミュレーションする煙周辺でPyro Solverが維持すべき余裕代を指定します。 このバッファがタイムステップ内の移動量を十分に収容できるほどの大きさであることが重要です。 しかし、このパラメータを大きくしすぎると、シミュレーションが遅くなってしまいます。

温度と浮力のパラメータ

浮力を介してtemperatureフィールドは、煙の大部分の動きに大きく影響を与えます。 このフォースを適切に制御するには、このフィールドの値の背後にある物理的な意味を知っている必要があります。 そして、浮力は Ambient Temp (K)Reference Temp (K) のパラメータで設定します。 これらのパラメータだけでなく、 Buoyancy Scale を使用することで、温度の範囲を変更することなく浮力を細かく調整することができます。

Smoke Object

Ambient Temp (K)

詳細は、Pyro Solverのヘルプでこれと同じ名前のパラメータを参照してください。 これら2つのパラメータの値は、リンクさせてください。

Reference Temp (K)

詳細は、Pyro Solverのヘルプでこれと同じ名前のパラメータを参照してください。 これら2つのパラメータの値は、リンクさせてください。 ビューポートで発光カラーが正しく表示されるまで、このパラメータを調整してください。

Temperature Scale

発光カラー用のtemperatureフィールドの乗数として作用します。 Pyro Solverで Ambient Temp (K)Reference Temp (K) をリンクさせて、それらの値が変更されたらシミュレーションに影響を与えれるようにしてください。 Temperature Scale パラメータは、Pyro Solverの設定に影響を与えることなく発光カラーを調整することができます。

Pyro Solver

Ambient Temp (K)

周辺の空気の温度を指定します。 temperatureフィールドの0の値が Ambient Temp (K) にマップされます。

Reference Temp (K)

temperatureフィールドの1の値に呼応した物理温度。 一番高いソースの温度がAmbient Temp (K) + T * (Reference Temp (K) - Ambient Temp (K))と同じになります。 Tは、(ソース設定で決定した)最大の入力温度値です(上記参照)。 そのため、一番高いソースの温度が物理的に妥当で、発光カラーがビューポートで正しく表示されるようにReference Temp (K)を設定してください。

Note

これらのパラメータ値の単位は、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

Gravity

重力フォースの大きさと方向。 これは、浮力の強度に影響します。 シーンスケールに合うようにこれらのパラメータを調整したら、あとはそのままにしてください。 Buoyancy Scale を使用することで、浮力の効果を微調整することができます。

Buoyancy Scale

浮力の強度に対する乗数。 このパラメータを使用することで、望み通りの速度で煙が上昇するように浮力を調整することができます。

Cooling Rate

temperatureフィールドを周辺の温度に冷却するレート。 適切な値を模索する時は、煙の上昇速度が遅くなり始める箇所に注目してください。

Flamesパラメータ

Pyro Solverの Flames タブのパラメータは、flameフィールドを使用したシミュレーションに大きく影響します。 flame値が望み通りの時間の間で持続されるようにするために、 Flame Lifespan パラメータを調整することから始めてください。 次に、flameフィールドから生成したい出力を有効にして、 Flame Range を調整します。 これらの出力に関する情報は、のページを参照してください。

Tip

ソースからの入力のflame値が分かっていれば、 Flame Range を調べる時に非常に役に立ちます。 ソースで作業している時に、その入力の最大値を計算すると良いでしょう。

シェイプオペレータ

これまでの工程は、シミュレーションする煙の全体の形状と動きを決定するためのものです。 これらの全体的な特徴が決まれば、シェイプオペレータを使用することで、シミュレーションにディテールを加えることができます。 Pyro Solverには、4つのシェイプオペレータが組み込まれています: DissipationDisturbanceShreddingTurbulence

Dissipation(消散)

煙が徐々に消えるようにするために、時間の経過と共にdensity値を下げます。 Sparseシミュレーションを実行する時には、 Clamp Below パラメータに適切な値を設定することが重要です。 そうしないと、微小なdensity値が残存し、無駄にアクティブなシミュレーション領域を膨張させてしまいます。

Disturbance(擾乱)とShredding(細断)

ランダムなフォースを適用して、シミュレーションを離散させます。 Disturbanceは、線形加速度を働かせて、滑らかな煙の表面を離散させるのに役立ちます。 Shreddingは、Velocityを回転させて流れの向きを変えます。 Shreddingは、流れを加速も減速もさせることなく、混沌とした動きを追加するのに効果的です。 これは、特にShreddingが使用されていない時に炎が垂直に伸びてしまったような炎のシミュレーションを横に広げるのに役に立ちます。

Turbulence(乱流)

これを使用することで、強力な大きなスケールのノイズをシミュレーションVelocityに追加することができます。

各シェイプオペレータには、それを有効にするかどうかのチェックボックスがあり、それを適用する強度を指定するためのスケール係数があります。 さらに、シェイプオペレータ別に詳細なパラメータを含んだタブが用意されています。 これらのタブで共通しているのは、 Control Field があるということです。 この Control Field を使用することで、各シェイプオペレータの強度を空間的に減衰させることができます。 Control Field を有効にすると、そこで指定したフィールドの値が Control Range から0-1にマッピングされます。 Remap Control Field が有効な場合は、フィールド値が Control Ramp を介して渡されます。 リマップされたコントロール値は、グローバル強度のスケール係数として適用されます。 Control Field は、目的の領域からマスクを構築して、そこにのみシェイプオペレータを適用することができます。

Tipsとトラブルシューティング

  • Advection-Reflection は、Vortex(渦巻き)を維持するのに非常に役立ちます。

    • Disabled は、Advection-Reflectionを無効にします。これは、divergenceフィールドを伴うシミュレーション(例えば、爆発)の最も安全なオプションです。

    • Single-Project は、シミュレーションにあまりオーバーヘッドを追加しない軽いAdvection-Reflectionメソッドを使用します。

    • Double-Project は、最適なVortex(渦巻き)維持量を示します。しかし、このメソッドは、実質的にサブステップ数を2倍にするので、 Single-Project よりも非常に処理が重いです。

  • Time Scale パラメータをアニメーションさせることができます。これは、特に、開始時に高いTime Scaleで強烈な起爆を取り込みたい爆発のシミュレーションで役に立ちます。

  • DisturbanceModeContinuous に設定すると、独立したノイズがすべてのボクセルに追加されて、表現可能な一番高いスケールの擾乱を生成します。 これは、雪崩のようなエフェクトで役に立ちます。しかし、ボクセルサイズが小さすぎると、 Continuous モードの Disturbance では、ノイズが多くて予期しないルックになってしまう可能性があります。

  • Pyro Solverの Forces 入力にマイクロソルバを接続することで、独自のフォースを煙に適用することができます。

  • Sparseシミュレーションで階段状の乱れがあることに気づいた場合は、 Padding が不十分です。 この問題を修正するには、 Advanced タブの Max Substeps を上げたり、 Padding を上げてください。

  • ソースとシミュレーションが非常に速い場合、サブステップ数が不十分になって、目立った筋が発生してしまいます。この問題を修正するには、 Max Substeps を上げてください。

  • 煙が衝突ジオメトリと作用していないようであれば、 Advanced ▸ Collisions タブの IOP Iterations を上げてください。

  • 煙に薄い軸平行の筋があることに気づいた場合は、Hourglass Filteringを有効にしてください。このコントロールは、Pyro Solverの Advanced ▸ Hourglass Filtering タブにあります。

  • Sparse Pyro Solverは、シミュレーション時間を短縮するために、一括で移流を実行します。そのため、メモリ使用量が跳ね上がります。メモリ使用量に問題があるようでしたら、 Advanced ▸ Advection ▸ Max Batch Size でそのバッチサイズを制限することができます。

Minimal OpenCL Solve

Pyro Solver SOPには Minimal OpenCL 計算を実行する機能があります。 この機能は非常に速くプロトタイプを組むのに役立ちます。 このオプションは Simulation Type ドロップダウンメニューの General タブにあります。 これはシミュレーションの実行中にパラメータをインタラクティブに操作することができるので、シミュレーションの効果に素早くフィードバックを反映させることができます。

このオプションを選択すると、すべてのシミュレーションデータがビデオメモリ内に残せるようにするためにソルバの一部の機能が無効になり、 Use OpenCL が有効になっている時にのみ必要になる負荷の重いコピーが回避されます。

Tip

シミュレーション中にパラメータを調整している時にソルバインターフェスが更新されるようにするには、 Edit メニューの Live Parameter Display during Playback を有効にしてください。

Tip

Pyro Solver SOPCenter パラメータをアニメーションさせることで、シミュレーションコンテナを動かすことができます。 例えば、これによって、炎をシミュレーションしながら移動する松明のワールド空間の動きを追跡することができます。

高速にシミュレーションを生成するために、 Minimal OpenCL はOpenCLデバイスを使用し、以下の制限事項が課されます。

  • シミュレーションのキャッシュ化が無効になります。つまり、タイムラインをスクラブさせて保存結果を確認することができません。

  • Advection-Reflection には対応していません。

  • Denseシミュレーションしか実行できません。

  • コンテナの動的なサイズ変更が無効になります。 Bound タブで静的なサイズを設定する必要があります。

  • ソルバは CFL Condition に基づいた動的なサブステップを行わなくなります。

  • ソーシングとコリダー対応に制限がかかります。どちらもフレーム範囲を指定する必要があり、ソルバはシミュレーション全体でこれらの入力ソースをループさせます。さらに、コリダーは必ず(collisionという名前の)符号付き距離フィールドと(vという名前の)Velocityフィールドに変換しなければなりません。

さらに以下の処理によってパフォーマンスを上げることができます:

  • ルックデブの間はパフォーマンスを維持できるようにPyro Bake Volume SOPノードの使用を控えてください。

  • Pyro Solver SOPノードのFieldsタブとShapeタブでガイドを無効にしてください: Fields ▸ Field Guides ▸ Field Guide ▸ No GuideShape ▸ Shape Guides ▸ No Guide

  • できるだけループソースを使用してください。

  • マイクロソルバを使用する場合、ボトルネックを回避する Use OpenCL オプションが有効になっているかどうか確認してください。

Tip

パフォーマンスとソルバ設定をテストする場合は、Simple GPU Ground Explosionがうってつけです。

Note

ビューポートのレンダリングを担っているGPUをOpenCLデバイスに設定すると最高のパフォーマンスが得られます。

Pyro

Sparse(疎)Pyro

レガシーPyro