Houdini 20.0 Pyro

シェーディングとレンダリング

On this page

Pyroシェーダは、煙、炎、爆発をレンダリングする時にそのルックを制御します。 HoudiniのPyroシェーダには、すべての関連アトリビュートに簡単にアクセスすることができ、レンダリング工程のあらゆるところで制御ができます。

Pyro Bake Volumeを理解する

Pyro Bake Volumeノードには、ビューポートでPyroソルバの結果のルックを向上させるためのコントロールが備わっています。 さらに、このノードはレンダリング結果がビューポート表示に非常に上手く一致するように自動的にマテリアルの割り当てを制御し、Pyro Shaderと同じようなインターフェースを持つように設計されています。 Scatterタブの Enable Scatter を有効にすると、Pyro Shaderで使用されるscatterボリュームがベイクされ、爆発内部で散乱する光のルックを近似処理することができます。

Pyro Bake VolumeとPyro Shaderの使い方

Pyro Bake VolumeノードにはPyro Shaderが含まれていて、処理されたボリュームにそのシェーダが自動的に割り当てられます。 この埋め込まれたシェーダは、Pyro Bake Volumeノードのパラメータを参照して、レンダー結果をビューポートに合わせるようになっています。 そのため、Pyro Bake Volumeノードのコピーを作成すれば、オブジェクトレベルでマテリアルの割り当てを調整することなく違ったバリエーションのレンダリングをすることができます。

Tip

Pyro Bake Volumeノードの中に潜ることで、そのPyro Shaderとコントロールにアクセスすることができます。

Pyro Shaderのほとんどの機能がPyro Bake Volumeノード上で利用可能ですが、ビューポートで利用不可なシェーダ上の特別なパラメータがいくつか存在します。 そのようなパラメータの効果を確認するには、ボリュームをレンダリングする必要があります。

以下は、Pyro Shaderを使ってさらに制御可能な機能です。

  • Use Control Volume パラメータを使って他のボリューム(temperatureなど)で煙の密度をクランプ、リマップ、スケールさせることができます。

  • Smoke Brightness (煙の明るさ)を設定することができます。

  • Absorption Color パラメータでAbsorption(吸収)を利用して煙の色を変更することができます。

  • Shadow Color パラメータでシャドウの色を変更することができます。

  • Scattering Phase (散乱位相)を設定することができます。

Note

Render ViewAuto Update が有効になっていると、大元のジオメトリはパラメータ変更がある度に再クックしてビューポートの視覚化アトリビュートを更新しなければならないので、ボリュームが重いほどレンダー更新が遅くなってしまいます。

Quick Setups メニューを使用してマテリアル参照を切ると、その割り当てられていたマテリアルはPyro Bake Volumeのパラメータと無関係になります。 これによって、SOPジオメトリを再クックすることなくマテリアルパラメータを調整することができるので、レンダリングが高速化されます。 しかし、シェーダパラメータの変更がPyro Bake Volumeノードに伝搬しないので、レンダーとビューポートのルックが異なるようになります。

Note

Volume Visualizationの機能を利用すると、特定の設定の組み合わせ(例えば、複数の発光体)をビューポート内で直接視覚化することができません。 このような場合、結合された Emission Volume (デフォルトではCe)が内部的に作成されて視覚化を補助します。 これが起きると、このノードは、異なる出力が視覚化されている旨のメッセージを表示し、下流のジオメトリを表示するとビューポートには違ったルックが生成されます。

散乱のセットアップ

  1. Scatter タブの Enable Scatter を有効にします。

  2. マスクなしで散乱の全範囲を視覚化するために Enable Mask を無効にします。

  3. テストするフレーム範囲内の最大のtemperature値を調べてから、それに応じて Source Range を調整します。

    • Source Range の最小値を上げることで、低いtemperature値が発光の散乱に寄与しないようにします。

    • 次に Source Range の最大値を設定します。適切な設定を調べるために、数フレームから最大のtemperature値を調べます。それらの平均値から始めて、さらにルックを微調整すると良いでしょう。

  4. 散乱の強度は ScaleHot Core Scale で調整します。

  5. シミュレーションのサイズに基づいてブラー量を変更します。散乱領域をもっと滑らかにするために Use Blur Steps を有効にします。

  6. 上記のパラメータを調整しながら、シミュレーションの最初、中間、最後のフレームをテストします。

  7. Enable Mask を有効にして、ビューポート内で望み通りの結果が生成される Mask CenterMask Width の値を調べます。別の方法としては、マテリアル参照を切って、その割り当てられているシェーダのパラメータを調整しながらレンダリング結果をテストすることができます。

Tip

どの範囲設定でも、それぞれのバインドされたボリュームの値の範囲を考慮してください。 Export タブの Compute Min/Max Values が有効になっている場合、Pyro Solverは、それぞれエクスポートされるボリュームの最小値と最大値をPrimitiveアトリビュートに書き込みます。

Pyro Shaderを理解する

Pyro Shaderを使用することで、煙、炎、爆発のシミュレーションまたはプロシージャルに生成されたボリュームのリアルなレンダリング結果を生成することができます。

Smoke(煙)とEmission(発光)

これら2つのコンポーネントを組み合わせて、最終的なボリュームレンダリングを構成します。 煙突の煙、塵雲、その他の全般的な煙要素といった一部のレンダリングでは、煙をシェーディングするだけで済みます。 Smoke(煙)は、主に密度とカラーで制御します。 その一方でEmission(発光)は、炎から放出される光の全体的な強度とカラーを制御します。

これらの各コンポーネントは、作業内容によってボリュームが異なります。 通常ではdensityボリュームは煙コンポーネントにバインドし、 Smoke タブのパラメータでその結果のルックを制御します。 このシェーダでは最大3個の発光要素を使用することができます: Scatter, Fire , Secondary Fire

ScatterPyro Bake Volume SOPで生成されたscatterボリュームを使用します。このscatterボリュームでは内部散乱の効果を事前にベイクしておくことができます。 この散乱は本当の挙動を近似処理したものですが、この手法の方がボリュームライトと多数のボリュームバウンスを使用するよりもレンダリング負荷がはるかに軽いです。 さらに、ルックをもっとアート志向で制御しやすくなります。

FireSecondary Fire には、Pyro Shader - Classicの頃のような従来のコントロールセットが用意されています。 特に、これらの発光要素には Intensity フィールドと Color フィールドが必要で、それぞれのフィールドは放出される光の量とカラーを制御します。 Scatter と同様で、 Fire でも他のボリュームでマスクすることができます。

Tip

どの範囲設定でも、それぞれのバインドされたボリュームの値の範囲を考慮してください。 Export タブの Compute Min/Max Values が有効になっている場合、Pyro Solverは、それぞれエクスポートされるボリュームの最小値と最大値をPrimitiveアトリビュートに書き込みます。

Emissionマスク

Pyro Shaderには、 ScatterFire を他のフィールドでマスクする機能があります。 デフォルトでは、maskフィールドにdensityが設定されていて、densityが高い領域内の発光を減らす効果があります。 マスクは、煤煙に焦げ焦げなディテールを取り入れることができるので、特に爆発のレンダリングで役立ちます。 正しく使用すると、ボリュームの内部が白熱して、煙の隙間から白熱が垣間見えるようになります。

以下の画像は、Smoke、Scatter、Scatter Mask、それらを最終的に合成した画像を示しています。

Scatter, Fire, Secondary Fire

使用可能なこれら3個の発光コンポーネントは最終レンダリングで一緒に合成されますが、これらはどれも用途が異なります。

  • Scatter は主に爆発内部での光の散乱を模倣するために使用し、Pyro Bake Volumeで生成可能な特別なscatterボリュームに依存します。

    SmokeとScatter(左) 対 Smokeのみ(右):

  • Fire は炎や火炎のシェーディングに使用することができます。デフォルトでは、発光の強度とカラーのどちらにもtemperatureボリュームを使用します。このコンポーネントにマスクを適用することも可能です。

    SmokeとFire(左) 対 Smokeのみ(右):

  • Secondary fire は主にPyro Trail Sourceで生成された軌道の先端に火を付けるのに使用します。このコンポーネントにマスクすることはできませんが、それ以外は考え方としては Fire と同じです。

    SmokeとSecondary Fire(左) 対 Smokeのみ(右):

Pyro Shaderの扱い方

To...Do this

densityに基づいて煙のカラーを変更する

  1. Smoke Color の隣にあるメニューを Constant から Use Ramp に変更します。

  2. Density Range パラメータで、煙のカラーを制御するdensity値の範囲を設定します。

  3. Smoke Color Ramp パラメータで、その Density Range に基づいて煙のカラーを変更します。

ボリューム内部での光の散乱の挙動に基づいて煙のカラーを変更する

Absorption Color を変更します。 よりリアルなルックの煙には、0.425(赤),0.36(緑),0.3(青)の値から始めると良いでしょう。

他のボリュームを使って煙の密度をスケールさせる

  1. Use Control Volume チェックボックスを有効にします。

  2. Bindings タブの Density Control Volume に、その密度に影響を与えるのに使用したいフィールドを設定します。ここでの用途だと通常ではtemperatureまたはflameを選択するのが良いでしょう。

Pyro Shader vs Pyro Shader - Classic

以下に、(18.5から導入された)Pyro Shaderと(それ以前の)Pyro Shader - Classicの主な違いを載せています。

Pyro Shader

Pyro Shader - Classic

最大3個のEmissionフィールドが用意されています: scatter , fire , secondary fire

1個のEmissionフィールドが用意されています

( scatterfire の)Emissionフィールドは、他のフィールドでマスクすることができます。 これによって、爆発に焦げ目の付いたディテールを足すことができます。

レンダリング時にボリュームにノイズを追加することができます。これをするにはrestフィールドが必要です。

Pyro Bake Volume SOPによって内部散乱を近似処理することでレンダリングをもっと軽くすることができます

ボリュームライトと大量のボリュームバウンスを使用することで、発光の内部散乱を総当り計算させることができます。

Note

技術的にはPyro Shader - Classicを使ってPyro Bake Volumeのルックを得ることが可能です。 これをするには、Pyro Bake Volume SOPの Bindings タブの Bake Emission Volume を有効にしてから、Pyro Shader - ClassicFire セクションの Color ModeColor Field に設定した後にCeColor Volume Name として使用することです。 ベイクされるEmissionボリュームはEmission Intensityで事前乗算されるので、Pyro Bake Volume SOPのFireセクションで指定されたIntensity Volumeはどの箇所でも1にリマップされている必要があります。

ボリュームの煙なし炎のレンダリング

densityという名前のボリュームがあれば、Mantraはレンダリング時にそのボリュームに対して光線を交差させます。 煙なしのPyroシミュレーションに関しては、このボリュームの値はどこも0です。 このようなボリュームでは、Mantraは光線が何も目に見えるものに当たらないと想定し、煙だけがレンダリングされないという結果になります。

これを回避するには、レンダリングされるジオメトリから空っぽのdensityボリュームを削除することで、強制的にMantraがEmission(放出)フィールドに対して光線を交差させることができます。 これによって、煙なしのPyroが完全にレンダリングされるようになります。

他の方法としては、Pyro Post-Processノードの Look タブにある Flame Density パラメータを使用して放出がゼロではない箇所のDensity値を小さい値に設定することができます。 基本的には、このパラメータは、レンダラーが煙のない炎を見逃さないように放出が存在する箇所において、バインドされたDensityフィールドに小さなプラス値を設定します。

Pyro

Sparse(疎)Pyro

Pyroインスタンス

レガシーPyro