On this page |
このワークフローの説明では、最低限のPyro系SOPノード一式を使って、煙や炎を作成する方法を学習します。 SOPベースのPyroシミュレーションの利点は、単一ネットワーク内で全体のセットアップを制御できることです。 ノードをSOPネットワークとDOPネットワークに分けて、再度それらのネットワークをマージするといったことが不要です。 特に初心者は、分かりやすく構造化されたワークフローから学びが得られることでしょう。 このチュートリアルは3つのパートで構成されています。 このチュートリアルの1つ目のパートでは、このチュートリアルの1番目のパートでは、たった5個のノードだけで煙のシミュレーションを作成します。 いくつかのパラメータを変更することで、少しのディテールが入った昇り立つ噴煙をリアルな煙雲に変えることができます。 他のレッスンは以下の通りです。
-
SOP Pyroのワークフロー: 煙
ソース ¶
ソースオブジェクトは、ジオメトリまたはボリュームであり、そこから煙や炎が生成されます。 どのジオメトリも使用することができ、さらに別のオブジェクトとマージすることで、さらに複雑な形状を取得することができます。 その一方で、Pyro Source SOPは、オブジェクトまたはボリュームをポイントで埋めたり覆います。 それらのポイントが煙の種として作用します。 このPyro Source SOPのもう1つの機能は、シミュレーションに必要なフィールドを初期化できることです。
-
obj レベルで、⇥ Tabキーを押してTABメニューを呼び出し、
torus
と入力します。 -
そのTABメニューから、Torusノードを作成し、それをシーンの原点に配置します。
-
このTorusノードをダブルクリックして中に入ります。このTorusノードを煙のソースオブジェクトとして機能させます。
-
Torus SOPの Uniform Scale パラメータを
2
に変更します。 -
Pyro Source SOPを追加し、その1番目の入力をTorus SOPの出力に接続します。
Pyro Source SOPの Display フラグを有効にすると、オブジェクトの形状の輪郭に沿ってポイントのみが表示されます。 そこには頂点毎にポイントが1個存在しています。 後ほど、煙はこれらのポイントから発生します。 頂点を煙の種に変換するのは高解像度オブジェクトには良い手法のように思います。 このTorus SOPは288個の頂点しかありませんが、標準のBox SOPを想像すると、たった8個の頂点しかありません。 十分な数の種を得るには、もっとソースポイントが必要です。 その1つの方法は、このTorus SOPの Rows と Columns の数を上げることですが、Pyro Source SOPにはもっと効率的な方法があります:
-
Mode を Volume Scatter に変更して、ジオメトリ内部をシードポイントで埋めます。この変更によって、合計4,567個のシードポイントが生成されました。
-
Particle Separation を使えば、シードポイントの数を制御することができます。値を小さくするほど、密度の濃いポイントクラウドが生成されます。このパラメータを
0.05
に設定して37,163個のシードポイントを取得します。
アトリビュート ¶
アトリビュートはシミュレーションを駆動させるので、すべてのシミュレーションにおいて重要な役割を担っています。
煙のシミュレーションに関しては、次の2つのアトリビュートが必須です:density
とtemperature
。
Pyro Source SOP内ですべてのアトリビュートが作成されます。
-
density
は、煙が存在する場所を定義します。 -
temperature
は、煙を上昇させます。煙は熱くなるほど速く上昇します。
Pyro Source SOPには、非常に重要なアトリビュート用のプリセットがいくつか用意されています:
-
Attributes に進んで、そこに
2
を入力すると、アトリビュートとパラメータが初期化されます。 -
1番目の Attribute ドロップダウンメニューから、 Density を選択します。
-
2番目の Attribute ドロップダウンメニューから、 Temperature を選択します。
アトリビュートを追加してもビューポート内で何も変化がありませんが、Pyro Source SOPを中クリックして Node Info ダイアログを表示すると、density flt
とtemperature flt
のエントリーが追加されているのがわかります。
このflt
文字列は、そのアトリビュートが浮動小数点値として扱われていることを意味します。
その一方、ベクトルアトリビュートの場合は3flt
で3個の浮動小数点値として扱われていることを意味します。
ベクトルアトリビュートの例には、ポジション、Velocity、カラーがあります。
例えば、v
(Velocity)アトリビュートを追加する場合には、 Vector Attribute オプションを有効にすることを忘れないでください。
カスタムアトリビュートでは、そのデータタイプを気にする必要があります。そうしないと、その値が誤解釈されてしまいます。
なぜv
アトリビュートが必要ではないのか?と疑問に思うことでしょう。
Pyroシミュレーションでは、Velocityはtemperature
アトリビュートから発展します。
とはいえ、初期速度を追加したい場合や煙を特定の方向に向けたい場合にはv
アトリビュートが必要になることでしょう。
3つの Default Value パラメータは、XYZの個々の値を定義することができます。
Geometry Spreadsheetでは、それらのアトリビュートが正しく初期化されているかどうかをチェックすることもできます。
density
とtemperature
のどちらのアトリビュート値も1.0
になっているはずです。
この値は、Pyro Source SOPの Default Value パラメータに呼応しています。そのパラメータを変更すれば、スプレッドシートの値も変わります。
パーティクルのスケール ¶
たくさんのパーティクルを作成するために既に Particle Separation を0.05
に設定しています。
Geometry Spreadsheetでは、pscale
アトリビュートの値が0.1
になっていることがわかります。
pscale
はHoudiniの多目的な標準アトリビュートであり、これを使用して多くの色々な事を制御することができます。
Pyroシミュレーションとの連携においては、このpscale
はシードポイントの内部的なスケールを決めます。
pscale
は、 Particle Scale に Particle Separation を乗算した結果の値です。
この値はシードポイントをボクセルに変換する際に重要になります。
pscale
が小さすぎると、煙がまったく見えなくなる問題が起こり得ます。
そのような場合、Geometry Spreadsheetを開いてpscale
を確認してください。
シードポイントを失わずに微小なボクセルを補正するには、 Particle Scale を上げてください。
アトリビュートのラスター化 ¶
現時点では、数千個もの煙のシードポイントが存在していますが、霧のようなボリューム構造は存在していません。 シードポイントを煙のボクセルに変換するには、アトリビュートをラスター化する必要があります。 この工程では、格子状のボクセルを作成し、そこにアトリビュートを適用します。
-
再びTABメニューを開いて、Volume Rasterize Attributes SOPを追加します。
-
その入力をPyro Source SOPの出力に接続します。
-
Volume Rasterize Attributes SOPの Display フラグを有効にします。現在のところ、このノードは何もアトリビュートを見ていないので、ポイントが消えているのがわかります。
-
Attributes パラメータに(カンマなしで)
density temperature
と入力します。このパラメータのドロップダウンメニューからアトリビュートを選択することもできます。ビューポートでは、Torusがボリュームクラウドに変わりました。 -
ボクセルを増やして解像度を良くしたいので、 Voxel Size を
0.05
に設定します。テスト用途でプレビューを高速にしたいのであれば、0.1
で作業しても良いでしょう。
これでTorusのボクセル表現が表示されました。
pscale
アトリビュートの効果を確認するために、Pyro Source SOPの Particle Scale の値を色々と変えてみてください。
値が違えばボリュームの印象が変わります。
値を小さくすると、ボリュームはより透明になります。しかし、値を大きくすればボクセルが大きくなります。
Pyroソルバ ¶
Pyro Solver SOPは、Volume Rasterize Attributes SOPに基づいてシミュレーションを実行します。 このソルバは、サブステップ、カラー、ノイズなど多くの事を定義する場所でもあります。
-
Pyro Solver SOPを追加し、その1番目の入力をそのVolume Rasterize Attributes SOPの出力に接続します。
-
Setup タブの General ▸ Voxel Size に
0.05
と入力して、シミュレーションネットワークで使用されるボクセルサイズを合わせます。
Sourcing タブが特に注目すべきところで、このタブにはVolume Rasterize Attributes SOPからのアトリビュート、さらに、 Source 3: flame エントリーが見つかります。
炎を生成するためのburn
アトリビュートはないので、現在のところ、このエントリーは何の意味もありません。
このチュートリアルシリーズの2番目のパートではflameソースを使用するので、このflameソースは残しておいてください。
他にも Source 4: vel エントリーがありますが、vel
アトリビュートを定義しない限り、そのソースは使用されることはありません。
存在しないソースを無効にする必要はなく、ソルバはそれらのソースを無視します。
をクリックして最初のテストを開始します。以下の動画では、あなたの方で確認できるはずの内容を示しています: 立ち昇るキノコ形の煙雲。
ノイズとディテールを加える ¶
現在の状態では、煙雲は均等なルックで密度、Velocity、形状の違いに差がありません。 Pyro Solverの Shape タブには、煙雲を小さく分割し、密度とVelocityが異なる領域を作成する機能がいくつか用意されています。
-
Buoyancy(浮力) を有効にして、値を
0.2
に設定します。これによって、煙があまり速く上昇しないようになり、積雲が生成されます。 Disturbance と Turbulence のパラメータはノイズベースで、値を高くすると煙が遅くなります。煙が遅すぎる場合、 Buoyancy を上げるか、または、Volume Rasterize Attributes SOPでv
アトリビュートを追加することを検討してください。 -
Wind(風) を有効にして、そのタブを展開します。 Wind Speed を
2
に設定します。 Wind Direction は、プラスX軸方向のデフォルトのままでも良いですし、別の方向を定義しても構いません。 Wind を使用すれば、もっと面白いルックを表現することができます。 -
Disturbance(擾乱) を有効にして、値を
3
に設定します。 -
このサブペインのパラメータでは、ノイズ関数を制御することができます。例えば、 Roughness を使用すれば、さらに微細な構造で薄い糸状体を追加することができます。
-
Turbulence(乱流) を有効にして、もっと小さいスケールのノイズと渦を追加します。値を
0.5
に設定します。 -
Roughness を
1
に変更します。
上記の設定によって、もっと乱れたシミュレーションで良い構造が生成されましたが、濃い領域が少なくてすぐに煙が消えてしまいます。 濃い煙にしたかったのであれば、以下のようにします。
-
Fields タブの Density ▸ Dissipation(消散) で煙の寿命を制御します。値を
0.05
に変更します。 -
Look タブの Density Scale を
1.5
に設定します。これによって、濃い煙の印象も得られます。 -
自由に Smoke Color と Shadow Color を変更して、色々なルックを表現することができます。
上記の設定によって、豊かで活発な濃い煙のシミュレーションが生成されました。 この煙はあまり速く上昇せず、良い感じの渦を形成するのに時間が必要になりますが、煙が消える密度の薄い領域を形成するのにも時間が必要になります。
機能拡張 ¶
Pyro Source SOPとVolume Rasterize Attributes SOPの間にAttribute Noise SOPを挟んでdensity
やtemperature
のアトリビュートを乱すことで、もっと乱流を加えることができます。
-
Attribute Names を
Float
に設定してtemperature
と入力します。また、density
とかdensity temperature
と入力して異なる結果を試してみると良いでしょう。 -
Noise Value ▸ Amplitude の値を
0.5
に変更します。このパラメータは、初期のtemperature
値を変更し、少し温度が上がったゾーンと下がったゾーンを作成します。 -
Animation ▸ Animate Noise を有効にします。
以下の動画では、Attribute Noise SOPを使って上記の設定をtemperature
に適用したシミュレーションを示しています。
もっとディテールが必要であれば、 Particle Separation と Voxel Size の値を0.025
に下げてください。