Houdini 20.0 Pyro

高度なPyroインスタンス化

On this page

Note

このワークフローガイドでは、 Spawn Points(生成ポイント)Packed Sets(パックセット) といった専門用語が出てきます。 これらの用語について詳しくないのであれば、Pyroインスタンス化の定義ページで詳細を知ることができます。

新しく追加されたPyro Spawn SourcesノードとPyro Source Instanceノードによる補助によって、Pyroインスタンスとそのアトリビュートを完全に制御することができます。

Pyro Spawn SourcesノードはSpawn Points(生成ポイント)を作成します。 ScatterやCurveなどのポイントソースを接続したり、そのノードで原点に単一ポイントを作成することができます(このポイントはTransform SOPを使用して自由に移動および回転させることができます)。 Spawn Points(生成ポイント)は、使用されるパックセットを特定し、 Start FrameSource Speed といった基本のアニメーションパラメータを格納します。Spawn Points(生成ポイント)は、フレーム毎に単一のインスタンスポイントを生成します。 Spawn Points(生成ポイント)はループするよう設定でき、その場合はシミュレーション中、異なる時間に新しいインスタンスポイントを生成します。

ノードのパラメータ値は、Spawn Points(生成ポイント)のPointアトリビュートに格納されます。 (例えば、下流のAttribute Adjust Floatノードから)それらのアトリビュートのプロパティを修正してインスタンスを制御することができます。 パラメータ上にマウスカーソルを置いてツールチップを表示すると、利用可能なアトリビュート名(namestartframeなど)を確認することができます。 それらのパラメータだけでなく、インスタンスの位置を制御するPpivotorientアトリビュートも存在します。 複数のPyro Spawn Sources SOPからのSpawn Points(生成ポイント)をまとめて修正したい場合、またはインスタンスポイントに変換したい場合は、それらのSpawn Points(生成ポイント)をマージすると良いでしょう。

その後、Spawn Points(生成ポイント)をPyro Source Instanceオペレータに渡します。 Spawn Points(生成ポイント)がアクティブな時、このノードはインスタンスポイントを生成します。 その一方で、それらのインスタンスポイントをPyro Solverに渡します。 Pyro Source InstanceノードはPointアトリビュートに対してルールの上書きを登録することができます。 それによって、例えばランダムな最小/最大の範囲内でtemperatureをスケールさせて、高温のソースと低温のソースを作成することができます。

以下では、高度なPyroインスタンス化セットアップを作成するための手順を説明しています。 基本のPyroインスタンス化ワークフローと同様、すべてはソースライブラリから始めます。

ライブラリを作成する

ライブラリにはすべてのソースを格納します。 ソースは、事前設定されたツールやカスタムネットワークで作成します。 どのソースもPyro Source Packに接続されていることが前提です。 このPyro Source Packノードは、パックソースを作成し、densitytemperatureといったボリュームのルールを格納します。

Pyro Configure Billowy Smokeツールに基づいて作成された3つの異なる形状(トーラス、ボックス、球)のソースがあるとしましょう。 それらのネットワークチェーンはtorus_smokesphere_smokebox_smokeという名前のPyro Source Packにそれぞれ接続します。 以下に示すように、これらのパックソースセットをMergeノードでLIBRARYに結合します。

Note

ライブラリの煙ソースの作成方法が分からない場合は、前の章のパックソースセットライブラリセクションで紹介した手順に従ってください。 このワークフローでは、そこでのセットアップを使用しても構いません。

Note

Pyro Configure Billowy Smokeツールの使用で作成されるオリジナルのPyro Solverはそのまま残しても構いません。または、削除して後で新しくソルバを作成しても構いません。

  • このLIBRARYの下流にCacheノードを追加します。このCacheノードは、特定のフレームが既に生成されている場合にその結果を保存します。そのフレームが後で必要になった場合、Pyro SolverはこのLIBRARYを再クックすることなくキャッシュから適切なフレームを取得することができます。これにより、特に計算処理の重いソースセットアップでシミュレーションが高速化されます。

Pyro Spawn Sourcesを作成する

LIBRARY内には3個のパックソースがあるため、各パックソースを使用するには少なくとも3個のPyro Spawn Sourcesノードが必要です。 ルールの上書きなどでパックソースを何回も使用したい場合は、変更されるソース毎に1個のPyro Spawn Sourcesノードを追加する必要があります。

  1. Gridノードを作成します。グリッドは、ソースがばら撒かれる領域を定義します。

  2. 1個のパックソース毎に1個のScatterノードを追加します。ここでは、3個のScatterオペレータが必要です。

  3. そのGridの出力をScatterノードの入力に接続します。

  4. それぞれの Force Total Count パラメータに534を入力します。

  5. 3個のPyro Spawn Sourcesノードを追加して、それらの入力をScatterノードの出力に接続します。

  6. Source Name パラメータでは、パックソースセットの名前であるtorus_smokesphere_smokebox_smokeを入力します。

  7. Mergeノードを追加して、それをPyro Spawn Sourceノードの出力に接続します。

Pyro Source Instanceを作成する

この時点では、セットアップはすべてのアトリビュートを持つSpawn Points(生成ポイント)を作成しています。 シミュレーションが Start Frame に到達すると、ソースがアクティブになります。 そのソースに関係付けられたインスタンスポイントを作成するには、以下の手順を実行します。

  1. 下流にPyro Source Instanceノードを追加します。

  2. Mergeノードの出力をその1番目の入力に接続します。

  3. LIBRARYノードの出力をその2番目の入力に接続します。

  4. Pyro Solverがない場合は作成し、目的に応じてカスタマイズします。ある場合は、既存のソルバオペレータを使用します。ソルバの1番目の入力をPyro Source Instanceノードの出力に接続します。

ここまでの結果は、以下のビデオのようになります。

アトリビュートを調整およびランダム化する

上記のビデオのように、煙の放出は数フレーム後に停止します。 これは、各Spawn Point(生成ポイント)がパックセットのアニメーション範囲を通常の速度で進むよう設定されているためです。 このフレーム範囲が終了すると(Pyro Source Pack SOPではデフォルトでフレーム1-12に設定されています)、ソーシングが停止します。 爆発や火の玉の場合には、この範囲を制限するのが望ましいですが、煙の場合には、フレーム範囲全体で放出を継続させた方が良いでしょう。

上記のシミュレーションでは、同じタイプのソースがすべて同時に開始することも分かります。

非常に幅広いアトリビュートを制御できることは、Spawn Points(生成ポイント)の大きなメリットの1つです。 Spawn Points(生成ポイント)は、ソースをインスタンス化するためのレシピと考えることができ、アトリビュートという形式で条件を設定することができます。 startframeendframeのアトリビュートを使用することで、このレシピを適用するタイミングをソルバに伝えることができます。 これは、ソーシングが特定のフレーム範囲で生じることを必ずしも意味するものではありませんが、ソーシングがこの範囲 で生じることはありません。

ソーシングはstartoffsetをオフセットとして使用して、startframeで開始します。 startframeより先に進んだ各フレームでは、インスタンスポイントのフレームオフセットがsourcespeedだけ増分されます。 放出を継続させるには、以下の変更のいずれかを適用します。

  • Pyro Spawn Sourcesノードを選択し、 Source Speed0に設定します。これにより、すべてのシミュレーションフレームでソーシングにまったく同じジオメトリが使用されます。

  • Source Speed を調整する代わりに、 Loop Length を有効にします。これにより、ソーシングの目的で、(指定された長さの)同じシーケンスが繰り返されます。 Source Speed0に設定するのとは異なり、このアプローチでは、シミュレーションの各フレームでパックソースセットの別々のフレームが引き続き使用されます。

startframeをランダム化するには、以下の手順を実行します。

  1. 各Pyro Spawn Sourceに1つずつ、合計3個のAttribute Adjust Floatノードを追加します。

  2. 新しいノードをPyro Spawn SourcesとMergeの間に挿入します。

  3. すべてのAttribute Adjust Floatノードを選択します。

  4. Attribute Namestartframeと入力します。

  5. Pattern Type ドロップダウンで、 Random を選択します。

  6. Range ValuesMin/Max に設定します。

  7. Min ValueMax Value の値を、125などに設定します。

  8. 各Attribute Adjust Floatに異なる Seed 値を入力します。

異なる Frame Rangestartframe値を持つ新しいセットアップでは、以下のようになります。

ルールの上書き

ルールの上書きによって、パックソースのマージ処理を制御することができます。 その良い例は、注入される煙の透明度に影響するdensityのスケールです。 以下の手順では、sphere_smokeで追加される煙がもっと濃くなると同時にbox_smokeがほぼ見えなくなるようにルールを調整します。

  1. Pyro SolverLook タブに移動して、 Smoke ▸ Density1に設定します。これは必須ではありませんが、よりよく見えるようになります。

  2. sphere_smokePyro Spawn Sourcesノードで、 Rule Overrides の近くにあるボタンをクリックします。

  3. Target Fielddensityに設定します。

  4. PropertyScale に設定します。ソーシング中の有効な煙の密度が、 Multiplier の値でスケールされます。

  5. Multiplier10に設定します。

  6. box_smokePyro Spawn Sourcesノードで上の手順を繰り返します。 Multiplier0.1に設定します。

パックソースセットに埋め込まれたルールは変更せず、インスタンスポイントに転送する前に個別に調整していることに注目してください。 これは、マージ処理を調整することを目的とした方法です。 インスタンス化の間、ライブラリをImmutable(変更不可)として扱う必要があるためです。

このサンプルセットアップではPyro Spawn Sourcesでルールの上書きを用いることで、同じタイプのすべてのインスタンスが確実に同一になるようにしました。 Pyro Source Instance SOPにPointアトリビュートで駆動される上書きを登録することもできます。 この方法では、インスタンス間にランダムなバリエーションを素早く加えることができます。

  1. Pyro Source Instanceノードで、 Overrides に移動してをクリックし、新しいルールを追加します。

  2. Target Fieldtemperatureと入力します。

  3. PropertyScale に設定します。

  4. Attribute に、temperature_scaleと入力します。

  5. アイコンをクリックして、adjust_temperature_scaleという名前のAttribute Adjust Floatノードを上流に作成します。

  6. 新しいAttribute Adjust Floatを選択します。

  7. Min Value0Max Value4と入力します。

シミュレーションすると、煙が異なるレートで上昇することが分かります。

Pyro

Sparse(疎)Pyro

Pyroインスタンス

レガシーPyro