Labs Gas Expand from Temperature / Labs Gas Flamefrontノードについて


こちらの記事では、「Labs Gas Expand from Temperature DOP」「Labs Gas Flamefront DOP」ノードの概要および各ノードのパラメーターについてご紹介します。
SideFXLabsツールのノードは、SideFX社のホームページで紹介されています。併せてご覧ください。

SideFXLabsツールのインストール手順

SideFX Labsツールセットのインストール手順については、以下の記事をご参照ください。

Houdiniの内部システムからの直接インストール
Githubからの手動インストール


Labs Gas Expand from Temperature DOPノードとは

このマイクロソルバーは温度変化に応じ、流体を膨張させる目的で使用できます。
Temperature(温度)は、特に煙や炎のシミュレーションを動作させる上で最も重要なフィールドデータになります。このノードでは、前フレームと現在のフレームにおけるtemperature fieldの値を使用した計算を行い、これをdivergence fieldに対して毎フレーム加算する処理を行うことで流体の膨張を表現します。特に温度の高い箇所についてはdivergence fieldに毎フレーム加算される数値が大きくなるため、流体中の温度の高い箇所が膨張する働きを示します。


各パラメーターについて

1.Expansion from Temp
温度分布をもとに、膨張度合いを調節します。

Properties
2.Ambient Temp (K)
温度による発散を利用して、0値(周囲の環境温度)を定義します。

3.Reference Temp (K)
温度による発散を利用して、1値(シミュレーションの基準となる温度)を定義します。

Visualize
4.Old Temp
old temperature field(1フレーム前のtemperature field)をスライスし、可視化します。

Bindings
5.Temperature
現在の温度情報かつ温度の変化を検出するために使用するフィールドを指定します。
デフォルトでは”temperature”となっています。

6.Old Temperature
1フレーム前の温度情報として保存するフィールドを指定します。
デフォルトでは”oldtemperature”となっています。

7.Divergence
フィールドの変化量を加算するフィールドを指定します。
デフォルトでは”divergence”となっています。

8.Time Scale
Gas Expand from Temperature DOPノード本体のタイムステップを調節します。


Gas Expand from Temperature DOPノードの機能

次に、Gas Expand from Temperature DOPノードについてご紹介します。今回は、Houdini18.0.532を使用しています。ノードを使用するために、ここでは爆発のシミュレーションを予め用意しています。

1. Houdiniを起動後、SideFX Labsツールが正常に読み込まれていることを確認します。

2. 今回は、Pyro Solver SOPノードを使用してシミュレーションを行っています。Gas Expand from Temperature DOPノードの効果を比較するため、DOPノードを適用していないpyrosolver_Nonと、適用したpyrosolver_Expandの2つを用意しています。

3. Pyro Solver SOPノードを使用する場合、特にHoudini Coreライセンスをご使用の場合、DOPノードは、Pyro Solver SOPノードの内部に配置します。そのため、一度SOPノードの内部に入ります。ここでは、DOPノードを適用するpyrosolver_Expandの中に入り、Gas Expand from Temperature DOPノードを配置します。

Houdini Coreライセンス以外をご使用の場合、Pyro Solver SOPノードを右クリックし、Arrow Editing of Contentsを選択することで、内部のノードに変更を加えることができます。

Pyro Solver SOPノード内の1階層目はSOP階層になっています。
用意されているDOP Network SOPノードに入ります。

FORCESと名前がついているSubnetwork内に、先ほど作成したGas Expand from Temperature DOPノードがあります。

4. Expansion from Tempパラメーターでは、temperature fieldの膨張度合いを調節します。
フィールド内にtemperatureの情報がある限り、無限に膨張し続けるので、キーフレームなどで制御する必要があるかもしれません。下の動画は、膨張度合いを比較したものになります。
時間が進むにつれて、より大きく膨らむ様子が確認できるかと思います。

また、Gas Expand from Temperature DOPノードのパラメーターは以下の数値に設定しています。ここでは、メインパラメーターの数値変更による膨張の度合について示すため、Ambient TempパラメーターやReference Tempパラメーターの数値は変更していません。

5. old temperature fieldの可視化を行う場合は、Old Tempパラメーターにチェックを入れて有効にした後、パラメーターで位置や方向を調節します。下の画像は、XY Planeで表示を行っています。

Gas Expand from Temperature DOP ノードについての紹介は以上になります。
炎の表現などではあまり活用する場面が少ないかもしれませんが、大規模な爆発や煙の表現では活用できるかと思います。




Labs Gas Flamefront DOPノードとは

このマイクロソルバーは、シンプルな火炎前面の燃焼を行う際に使用できます。火炎前面とは、着火点から伝播する燃焼波の最前面部分のことを指します。


各パラメーターについて

Properties
1.Voxel Size
火炎面を生成する際に使用するボクセルのサイズを調節します。基本的に、pyroslverの分割サイズにリンクされている必要があります。

Flame Front
2.Ignition Temperature
燃焼が発生する温度の閾値を調節します。ボクセル内の温度情報の値がこの値を超えると、発火します。

3.Flame Speed
火炎面が一秒間で移動する速さを調節します。また、0.35に設定した場合は天然ガス、0.55はメタンガス、7.7は水素を燃焼させた場合に相当します。

4.Min Speed Ratio
炎が進行する際の最小速度比を調節します。例えば値が0.2の場合、設定した火炎面の速度の約20%の速度で進行することを示します。

5.Bandwidth
SDFを初期化するための閾値として機能し、surfel(ボクセルのサーフェス)の帯域幅を調節します。

Burning
6.Expansion on Combust
divergence fieldに直接加算される数値を調節します。

7.Temp Gain on combust
temperature fieldに直接加算される数値を調節します。

8.Diffusion Rate
酸素に相当する数値をどれだけ取り除くかを調節するパラメーターです。値が大きい程、燃焼に必要な気体が周辺に無い状態となるため、燃焼が抑えられます。

Visualize
9.Burn
burn fieldを可視化します。

10.Waste
waste fieldを可視化します。

11.Flamefront
flamefrontとして使用されるSDFを可視化します。

12.Fuel
fuel fieldを可視化します。

Notes
13.Time Scale
マイクロソルバー自体のタイムスケールを調節します。


Gas Flamefront DOPノードの機能

次に、Gas Flamefront DOPノードについてご紹介します。 今回は、Houdini18.0.532を使用しています。ノードを使用するために、ここでは炎のシミュレーションを予め用意しています。

1. Houdiniを起動後、SideFX Labsツールが正常に読み込まれていることを確認します。

2. DOP Network内に入り、Tabキーから “ Labs Gas Flamefront (Beta)”を作成します。ここでは例として、Gas Expand from TemperatureDOPノードをVolume Source DOPノードの下に接続します。

3. Gas Flamefront DOPノードのVoxel Sizeパラメーターを、Smoke Object DOPノードのDividion Sizeパラメーターの値と合わせておきます。リンクはされていなくても動作しますが、分割数は合わせておくことが推奨されていますので、ここではリンクしておきます。

まず、Smoke Object DOPノードのDivision Sizeパラメーターの上で右クリックをし、メニューを開きます。メニューの中から”Copy Parameter”を選択することで、参照するパラメーターのパスを記録します。

次に、Gas Flamefront DOPノードに移動し、Voxel Sizeパラメーターに対して、先ほどと同じメニューを右クリックで開きます。ここでは、メニューの中から”Paste Relative References”を選択します。これによって、先ほど記録したパスが入力され、値の参照が可能になります。

下の画像のように、ch(“../”)のようなコマンドが入力されていれば成功です。

4.ここからは、Labs Gas Flamefrontノードのパラメーターについてご紹介します。
下の動画では、Ignition Temperatureパラメーターを変更した際の挙動を比較しています。このパラメーターはfuelに対する引火のしやすさをtemperatureの値を使用して調節する閾値のような役割があるので、値が小さいほど引火しやすくなり、燃え広がるまでの時間が短いことが確認できます。

5. 下の動画では、Flame Speedパラメーターを変更した際の挙動を比較しています。値が大きいほど、燃え広がる速度が速いことが確認できます。

6. 下の動画では、Min Speed Ratioパラメーターを変更した際の挙動を比較しています。ここでは、Flame Speedパラメーターの値を7.7に設定した状態で、比較を行っています。Flame Speedに対する速度比率なので、Min Speed Ratioパラメーターの値を1に設定した場合は、100%の速度なので、元の速度と変わりません。値が小さいほど、速度は遅くなります。

7. 下の動画では、Bandwidthパラメーターを変更した際の挙動を比較しています。燃え広がる範囲を制御するためにSDFボリュームが使用されています。Bandwidthパラメーターの値が0の場合、コンテナ内全てが燃焼範囲内に入ります。

8. 下の動画は、Expansion on Combustパラメーターを変更した際の挙動を比較しています。パラメーターで設定した値がburnアトリビュートと乗算され、divergenceアトリビュートに加算されます。

9. 下の動画では、Temp Gain on Combustパラメーターを変更した際の挙動を比較しています。こちらはパラメーターで設定した値がburnアトリビュートと乗算され、temperatureアトリビュートに加算されます。

10. 下の動画では、Diffusion Rateパラメーターを変更した際の挙動を比較しています。DOPノード内ではGas Blur DOPノードのRadiusパラメーターが関連付けられているので、特定のフィールドにブラーがかかっている状態になります。値が大きいほど、ブラーの強度が強くなるので、結果的に燃焼が小さくなっているように見えます。

11. ビジュアライズを行う際は、Smoke Object DOPノードのビジュアライズをオフにしてから、Gas Flamefront DOPノードの各チェックボックスをオンにすると確認しやすくなります。

Burnが燃焼開始場所となり、fuelに引火して燃え広がります。その際に、燃え広がる範囲をFlamefrontによって制御し、引火するfuelにむらを作るため、Wasteというデータが用意されているイメージになります。

Gas Flamefront DOP ノードについての紹介は以上になります。
火炎前面を生成するためのノードということで、非常に細かな表現を対象としていますが、より炎の動きに対して説得力を持たせることができるかと思います。