Houdini 20.0 Pyro

SOP Pyroのワークフロー: 煙

On this page

このワークフローの説明では、最低限のPyro系SOPノード一式を使って、煙や炎を作成する方法を学習します。 SOPベースのPyroシミュレーションの利点は、単一ネットワーク内で全体のセットアップを制御できることです。 ノードをSOPネットワークとDOPネットワークに分けて、再度それらのネットワークをマージするといったことが不要です。 特に初心者は、分かりやすく構造化されたワークフローから学びが得られることでしょう。 このチュートリアルは3つのパートで構成されています。 このチュートリアルの1つ目のパートでは、このチュートリアルの1番目のパートでは、たった5個のノードだけで煙のシミュレーションを作成します。 いくつかのパラメータを変更することで、少しのディテールが入った昇り立つ噴煙をリアルな煙雲に変えることができます。 他のレッスンは以下の通りです。

  1. SOP Pyroのワークフロー: 煙

  2. SOP Pyroのワークフロー: 燃えるタイヤ

  3. SOP Pyroのワークフロー: 火の玉

ソース

ソースオブジェクトは、ジオメトリまたはボリュームであり、そこから煙や炎が生成されます。 どのジオメトリも使用することができ、さらに別のオブジェクトとマージすることで、さらに複雑な形状を取得することができます。 その一方で、Pyro Source SOPは、オブジェクトまたはボリュームをポイントで埋めたり覆います。 それらのポイントが煙の種として作用します。 このPyro Source SOPのもう1つの機能は、シミュレーションに必要なフィールドを初期化できることです。

  1. obj レベルで、⇥ Tabキーを押してTABメニューを呼び出し、torusと入力します。

  2. そのTABメニューから、Torusノードを作成し、それをシーンの原点に配置します。

  3. このTorusノードをダブルクリックして中に入ります。このTorusノードを煙のソースオブジェクトとして機能させます。

  4. Torus SOPの Uniform Scale パラメータを2に変更します。

  5. Pyro Source SOPを追加し、その1番目の入力をTorus SOPの出力に接続します。

Pyro Source SOPの Display フラグを有効にすると、オブジェクトの形状の輪郭に沿ってポイントのみが表示されます。 そこには頂点毎にポイントが1個存在しています。 後ほど、煙はこれらのポイントから発生します。 頂点を煙の種に変換するのは高解像度オブジェクトには良い手法のように思います。 このTorus SOPは288個の頂点しかありませんが、標準のBox SOPを想像すると、たった8個の頂点しかありません。 十分な数の種を得るには、もっとソースポイントが必要です。 その1つの方法は、このTorus SOPの RowsColumns の数を上げることですが、Pyro Source SOPにはもっと効率的な方法があります:

  1. ModeVolume Scatter に変更して、ジオメトリ内部をシードポイントで埋めます。この変更によって、合計4,567個のシードポイントが生成されました。

  2. Particle Separation を使えば、シードポイントの数を制御することができます。値を小さくするほど、密度の濃いポイントクラウドが生成されます。このパラメータを0.05に設定して37,163個のシードポイントを取得します。

アトリビュート

アトリビュートはシミュレーションを駆動させるので、すべてのシミュレーションにおいて重要な役割を担っています。 煙のシミュレーションに関しては、次の2つのアトリビュートが必須です:densitytemperature。 Pyro Source SOP内ですべてのアトリビュートが作成されます。

  • densityは、煙が存在する場所を定義します。

  • temperatureは、煙を上昇させます。煙は熱くなるほど速く上昇します。

Pyro Source SOPには、非常に重要なアトリビュート用のプリセットがいくつか用意されています:

  1. Attributes に進んで、そこに2を入力すると、アトリビュートとパラメータが初期化されます。

  2. 1番目の Attribute ドロップダウンメニューから、 Density を選択します。

  3. 2番目の Attribute ドロップダウンメニューから、 Temperature を選択します。

アトリビュートを追加してもビューポート内で何も変化がありませんが、Pyro Source SOPを中クリックして Node Info ダイアログを表示すると、density flttemperature fltのエントリーが追加されているのがわかります。 このflt文字列は、そのアトリビュートが浮動小数点値として扱われていることを意味します。 その一方、ベクトルアトリビュートの場合は3fltで3個の浮動小数点値として扱われていることを意味します。 ベクトルアトリビュートの例には、ポジション、Velocity、カラーがあります。 例えば、v(Velocity)アトリビュートを追加する場合には、 Vector Attribute オプションを有効にすることを忘れないでください。 カスタムアトリビュートでは、そのデータタイプを気にする必要があります。そうしないと、その値が誤解釈されてしまいます。

なぜvアトリビュートが必要ではないのか?と疑問に思うことでしょう。 Pyroシミュレーションでは、Velocityはtemperatureアトリビュートから発展します。 とはいえ、初期速度を追加したい場合や煙を特定の方向に向けたい場合にはvアトリビュートが必要になることでしょう。 3つの Default Value パラメータは、XYZの個々の値を定義することができます。

Geometry Spreadsheetでは、それらのアトリビュートが正しく初期化されているかどうかをチェックすることもできます。 densitytemperatureのどちらのアトリビュート値も1.0になっているはずです。 この値は、Pyro Source SOPの Default Value パラメータに呼応しています。そのパラメータを変更すれば、スプレッドシートの値も変わります。

パーティクルのスケール

たくさんのパーティクルを作成するために既に Particle Separation0.05に設定しています。 Geometry Spreadsheetでは、pscaleアトリビュートの値が0.1になっていることがわかります。 pscaleはHoudiniの多目的な標準アトリビュートであり、これを使用して多くの色々な事を制御することができます。 Pyroシミュレーションとの連携においては、このpscaleはシードポイントの内部的なスケールを決めます。 pscaleは、 Particle ScaleParticle Separation を乗算した結果の値です。 この値はシードポイントをボクセルに変換する際に重要になります。 pscaleが小さすぎると、煙がまったく見えなくなる問題が起こり得ます。 そのような場合、Geometry Spreadsheetを開いてpscaleを確認してください。 シードポイントを失わずに微小なボクセルを補正するには、 Particle Scale を上げてください。

アトリビュートのラスター化

現時点では、数千個もの煙のシードポイントが存在していますが、霧のようなボリューム構造は存在していません。 シードポイントを煙のボクセルに変換するには、アトリビュートをラスター化する必要があります。 この工程では、格子状のボクセルを作成し、そこにアトリビュートを適用します。

  1. 再びTABメニューを開いて、Volume Rasterize Attributes SOPを追加します。

  2. その入力をPyro Source SOPの出力に接続します。

  3. Volume Rasterize Attributes SOPの Display フラグを有効にします。現在のところ、このノードは何もアトリビュートを見ていないので、ポイントが消えているのがわかります。

  4. Attributes パラメータに(カンマなしで)density temperatureと入力します。このパラメータのドロップダウンメニューからアトリビュートを選択することもできます。ビューポートでは、Torusがボリュームクラウドに変わりました。

  5. ボクセルを増やして解像度を良くしたいので、 Voxel Size0.05に設定します。テスト用途でプレビューを高速にしたいのであれば、0.1で作業しても良いでしょう。

これでTorusのボクセル表現が表示されました。 pscaleアトリビュートの効果を確認するために、Pyro Source SOPの Particle Scale の値を色々と変えてみてください。 値が違えばボリュームの印象が変わります。 値を小さくすると、ボリュームはより透明になります。しかし、値を大きくすればボクセルが大きくなります。

Pyroソルバ

Pyro Solver SOPは、Volume Rasterize Attributes SOPに基づいてシミュレーションを実行します。 このソルバは、サブステップ、カラー、ノイズなど多くの事を定義する場所でもあります。

  1. Pyro Solver SOPを追加し、その1番目の入力をそのVolume Rasterize Attributes SOPの出力に接続します。

  2. Setup タブの General ▸ Voxel Size0.05と入力して、シミュレーションネットワークで使用されるボクセルサイズを合わせます。

Sourcing タブが特に注目すべきところで、このタブにはVolume Rasterize Attributes SOPからのアトリビュート、さらに、 Source 3: flame エントリーが見つかります。 炎を生成するためのburnアトリビュートはないので、現在のところ、このエントリーは何の意味もありません。 このチュートリアルシリーズの2番目のパートではflameソースを使用するので、このflameソースは残しておいてください。 他にも Source 4: vel エントリーがありますが、velアトリビュートを定義しない限り、そのソースは使用されることはありません。 存在しないソースを無効にする必要はなく、ソルバはそれらのソースを無視します。

をクリックして最初のテストを開始します。以下の動画では、あなたの方で確認できるはずの内容を示しています: 立ち昇るキノコ形の煙雲。

ノイズとディテールを加える

現在の状態では、煙雲は均等なルックで密度、Velocity、形状の違いに差がありません。 Pyro Solverの Shape タブには、煙雲を小さく分割し、密度とVelocityが異なる領域を作成する機能がいくつか用意されています。

  1. Buoyancy(浮力) を有効にして、値を0.2に設定します。これによって、煙があまり速く上昇しないようになり、積雲が生成されます。 DisturbanceTurbulence のパラメータはノイズベースで、値を高くすると煙が遅くなります。煙が遅すぎる場合、 Buoyancy を上げるか、または、Volume Rasterize Attributes SOPでvアトリビュートを追加することを検討してください。

  2. Wind(風) を有効にして、そのタブを展開します。 Wind Speed2に設定します。 Wind Direction は、プラスX軸方向のデフォルトのままでも良いですし、別の方向を定義しても構いません。 Wind を使用すれば、もっと面白いルックを表現することができます。

  3. Disturbance(擾乱) を有効にして、値を3に設定します。

  4. このサブペインのパラメータでは、ノイズ関数を制御することができます。例えば、 Roughness を使用すれば、さらに微細な構造で薄い糸状体を追加することができます。

  5. Turbulence(乱流) を有効にして、もっと小さいスケールのノイズと渦を追加します。値を0.5に設定します。

  6. Roughness1に変更します。

上記の設定によって、もっと乱れたシミュレーションで良い構造が生成されましたが、濃い領域が少なくてすぐに煙が消えてしまいます。 濃い煙にしたかったのであれば、以下のようにします。

  1. Fields タブの Density ▸ Dissipation(消散) で煙の寿命を制御します。値を0.05に変更します。

  2. Look タブの Density Scale1.5に設定します。これによって、濃い煙の印象も得られます。

  3. 自由に Smoke ColorShadow Color を変更して、色々なルックを表現することができます。

上記の設定によって、豊かで活発な濃い煙のシミュレーションが生成されました。 この煙はあまり速く上昇せず、良い感じの渦を形成するのに時間が必要になりますが、煙が消える密度の薄い領域を形成するのにも時間が必要になります。

機能拡張

Pyro Source SOPとVolume Rasterize Attributes SOPの間にAttribute Noise SOPを挟んでdensitytemperatureのアトリビュートを乱すことで、もっと乱流を加えることができます。

  1. Attribute NamesFloatに設定してtemperatureと入力します。また、densityとかdensity temperatureと入力して異なる結果を試してみると良いでしょう。

  2. Noise Value ▸ Amplitude の値を0.5に変更します。このパラメータは、初期のtemperature値を変更し、少し温度が上がったゾーンと下がったゾーンを作成します。

  3. Animation ▸ Animate Noise を有効にします。

以下の動画では、Attribute Noise SOPを使って上記の設定をtemperatureに適用したシミュレーションを示しています。 もっとディテールが必要であれば、 Particle SeparationVoxel Size の値を0.025に下げてください。

Pyro

Sparse(疎)Pyro

Pyroインスタンス

レガシーPyro