Houdini 18 SparsePyro 02 “Geometry node”


本記事では、Houdini18.0で追加されたPyroに関するノードと機能についてご紹介します。
今回は第2回目としまして、新しく追加されたジオメトリノードについてご説明させていただきます。

1. 追加ノード

Houdini18.0へのアップデートで新たに追加されたPyroシミュレーションに関するジオメトリノードは以下の画像1の通りです。

Pyro Solver ジオメトリノード
・Pyro Post-Prosess ジオメトリノード
・Pyro Source Spread ジオメトリノード

画像1. 追加されたジオメトリノード


まず、第2章では「Pyro Solver ジオメトリノード」につきまして、ご説明させていただきます。

2. Pyro Solver ジオメトリノード

Houdini18.0では、SOP階層でシミュレーションの設定を行うことが可能になりました。

これまでHoudini内で煙や炎のシミュレーションを行う場合は、必ずDOP階層内にデータを渡す流れをユーザー側で設定する必要がありました。

この手順はHoudiniFXライセンスやIndieライセンス、Apprenticeライセンスであれば可能でしたが、Houdini Coreライセンスはシミュレーション全般を除いたライセンス形式であるため、ユーザー側でダイナミクスノードを使用してネットワークを組み、シミュレーションを行うこと自体に制限がありました。

Houdini18.0では、DOP階層でのシミュレーションとビジュアライズの流れを「Pyro Solver ジオメトリノード」という形で使用することが可能になりました。

画像2. ネットワークの例


上の画像2は、「Pyro Solverジオメトリノード」使用して作成したものです。

「Pyro Solverジオメトリノード」自体は、SOP階層で扱うことができるアセットノードになります。使用する際には、これまでのシミュレーションと同様にベースとなるボリュームデータを先に用意しておく必要があります。

画像3. 「Pyro Solverジオメトリノード」の内部


ノード上を右クリックした後、メニューからAllow Editing of Contentsを選択し、ノードのロックを解除した状態でノード内に入ると、上の画像3のような構造で構成されていることが分かります。

DOPNetworkの内部は「Pyro Solver(Sparse)ダイナミクスノード」を中心に構成されています。

画像4. 「Pyro Solver ジオメトリノード」の入力


上の画像4からお判りいただけるかと思いますが、「Pyro Solver ジオメトリノード」の第2入力はコリジョン用のボリュームデータ入力用となっています。

試しに、第2入力に対して「BOX ジオメトリノード」を接続します。下の画像5のシーンビューように、炎のソースボリュームの上にボックスオブジェクトを配置します。

画像5. 「BOX ジオメトリノード」の作成と第2入力への接続


この状態でフラグを切り替えて確認します。すると下の画像6のように、ボックスを避けるように炎が上へ上昇する様子が確認できます。

画像6. ボックスと炎のコリジョン


「Pyro Solver ジオメトリノード」の内部に用意されているDOP階層内では、「Volume Source ダイナミクスノード」と「Static Object ダイナミクスノード」の2つを使用して、「Pyro Solver ジオメトリノード」の第2入力から読み込まれたオブジェクトを下の画像7のように、コリジョン用として読み込んでいることが分かります。

画像7. コリジョンオブジェクトの読み込み


画像8. Allow Editing of Contentsを選択せずに中に入った場合

ノードのロックを解除せずノード内に入った場合は、画像8のように直接、DOP階層に入ります。FXライセンスやIndieライセンス、Apprenticeライセンスではマイクロソルバーを使用して、細かな挙動の調節を行うことができます。

おおまかな「Pyro Solver ジオメトリノード」の説明は以上になります。

次の節では、ノードに用意されているタブについて見ていきます。

このノードでは基本的に、炎の作成に必要なノードをタブとして扱えるようにしています。

Setupタブにつきましては、少し既存のノードと少し異なるパラメータが用意されていますので、詳細を説明させて頂きます。

2.1 Setupタブ

画像9. 「Pyro Solver ジオメトリノード」のSetupタブ内

こちらのタブでは、主に計算領域の調節に関するパラメータが格納されています。「Voxel Size」や「Center」、「Boundary Conditions」といったパラメータに関しては、前回の記事にてご紹介させていただいた「Smoke Object (Sparse) ダイナミクスノード」におけるパラメータと同じ構成になっています。

「Collisions」と「Visualize」につきましては、「Smoke Object (Sparse) ダイナミクスノード」に無いものなので、簡単に2.1.1項と2.1.2項でご説明させていただきます。

2.1.1 Collisons

画像10.「Pyro Solver ジオメトリノード」の「Collisions」

「Collisions」は、ボリュームと衝突させたいオブジェクトとの間に働く衝突判定の設定を行うパラメータ群です。

画像11. 「Create From」パラメータのモード切り替え

「Create From」のプルダウンメニューでは、モードを切り替えることができます。使用できるモードは、「Collision Source」か「SDF+Volume Velocity」の2つになります。

このモードの違いは計算を行う際に、ボリュームデータとしてSDFを使用するかしないかという点になります。SDFについて詳しくお知りになりたい方はこちらの記事を参照して下さい。

簡単に言えば、衝突判定の計算を行う際にDOP階層内で「Static Object ダイナミクスノード」を使用するか、「Volume Source ダイナミクスノード」を使用するかの違いになります。

画像12. パラメータのモードとダイナミクスノードの対応

「Collision Source」モードを使用した場合は上の画像9の「Collision Source」と書かれた部分のノードが使用され、「SDF + Velocity Volume」モードの場合は「SDF + Velocity Volume」と書かれた部分のノードが使用されます。

画像13. Collisions

また、「Collision Source」モードの場合は、「Collision Voxel Size」と「Collision Offset」、「Use Deforming Geometry」が使用可能になります。

2.1.2 Visualize

画像14. Visualize

こちらのパラメータでは、「Velocity」、「Temperature」、「Flame」の3つのボリュームデータを可視化するためのパラメータになります。Show/Hideで表示と非表示を切り替えることができ、ModifyではEdit Visualizerメニューを起動させ、可視化する際の詳細設定を行うことができます。

同様のことは、シーンビュー横のHide Display OptionsからVisualizerを使用することでも可能です。

画像15. 各ボリュームデータの可視化

2.2 その他のタブについて

先述の通り、「Pyro Solver ジオメトリノード」は炎を作成するために必要なノードをタブに置き換えて使用できるようにしたアセットノードです。

画像16. タブとノードの対応

上の画像16は、どのタブがどのノードに相当するかを当てはめたものです。それぞれパラメータの構成もほぼ同じものとなっています。

もしパラメータの使用方法につきまして詳しくお知りになりたい場合は、これらのノードを参照すると理解が深まるかと思います。

3. Pyro Source Spread ジオメトリノード

画像17. 「Pyro Source Spreadジオメトリノード」による燃え広がり

「Pyro Source Spreadジオメトリノード」は、オブジェクトやキャラクターなどに燃え広がる様子を再現する際に使用できるアセットノードの一つになります。

炎の発生には元となるボリュームデータが必要ですが、これをアニメーションさせることで、燃え広がるような動きを再現します。ここではボリュームをアニメーションをさせるために最低限必要な設定を、順を追ってご説明します。

1.まずベースとなるジオメトリを追加し、サーフェイスに対してポイントを作成します。ここでは「Pyro Source ジオメトリノード」を使用しています。

画像18. Pig Headと「Pyro Sourceジオメトリノード」の作成

調節したパラメータは以下の通りです。

Pyro Source ジオメトリノード:
Mode : Surface Scatter
Particle Separation : 0.015
Particle Scale : 1.5

尚、この段階ではtemperatureなどのアトリビュートを付加しない方が得策です。

後ほど燃え広がりのスタートとなるポイントをグループ分けする際に、スタートグループのポイントが持つtemperatureアトリビュートが削除されてしまうためです。グループ分けを行った後に、アトリビュートを設定すると良いかと思います。

2.ポイントのグループ分けを行います。ここでは簡単にボックスオブジェクトをバンディングボックスとして使用します。ボックスをポイントに重なるように配置します。

画像19. 「Boxジオメトリノード」と「Group Createジオメトリノード」
の追加

調節したパラメータは以下の通りです。

Box ジオメトリノード:
Center : 0, 0.4, 0
Uniform Scale : 0.17

Group Create ジオメトリノード:
Group Name : start
Base Group の Enable : チェックを外す
Keep in Bounding Regions の Enable : チェックを入れる
Bounding Type : Bounding Object (points or vertices only)

3.ここで、スタートグループのポイントに対して、temperatureアトリビュートを持たせます。

画像20. 「Attribute Wrangle ジオメトリノード」の追加

ここでは、「Attribute Wrangle ジオメトリノード」を使用して、アトリビュートを追加しています。また、数値をパラメータで操作できるようにchf関数を使用して設定しています。

下の画像のように設定します。

画像21. temperatureアトリビュートの作成

右側にあるスライダーのマークをクリックすると、パラメータが作成されます。この中に、1を入力しています。

4.次に「Pyro Source Spread ジオメトリノード」を接続します。

画像22. 「Pyro Source Spread ジオメトリノード」の追加

調節したパラメータは以下の通りです。

Pyro Source Spread ジオメトリノード:
Temperature Changeタブ 内
Cooling Rate : 0.4
Search Radius : 1

この状態で、「Pyro Source Spread ジオメトリノード」のVisualizeを「None」から「Burn」に変更します。すると下の画像のように色が徐々に変化する様子が確認できます。

画像23. ビジュアライズの結果

「Pyro Source Spread ジオメトリノード」はスタート地点から近傍のポイントを検索し、見つかったポイントに対して順に値を持たせるというプロセスが内部で構成されています。

これをSOP Solverを使用してアニメーションさせることで、燃え広がりのベースとなる動きを作成しています。

5.最後に、ポイントをVDBに変換します。「Volume Rasterize Attributesジオメトリノード」を接続します。

画像24. 「Volume Rasterize Attributesジオメトリノード」の追加

調節したパラメータは以下の通りです。

Volume Rasterize Attributesジオメトリノード:
Attributes : burn temperature
Voxel Size : 0.01

ここでは「Pyro Source Spread ジオメトリノード」によって、burnアトリビュートとtemperatureアトリビュートに対して伝播するような動きが与えられるので、この2つのアトリビュートをボリュームプリミティブとして使用します。

ここまでの結果を見ると、ボリュームデータが徐々に広がる様子が確認できるかと思います。

画像25. ボリュームの動きの比較

このように、「Pyro Source Spread ジオメトリノード」はボリュームプリミティブに対して動きをつけるために使用することができます。この動きを利用することで、燃え広がるような動きを作成することができます。

以上が「Pyro Source Spread ジオメトリノード」の説明となります。

4. Pyro Post Process ジオメトリノード

画像26. 「Pyro Post Processジオメトリノード」のLookタブ

こちらのノードは、SOP階層内の煙や炎の可視化とポスト処理のために使用できるアセットノードです。

LookタブではSOP階層に読み込んだボリュームデータに対してルックを設定するためのパラメータがまとめられています。Houdini17.5から用意されている「Volume Visualizationジオメトリノード」と同じように使用することができるので、あまり変わりがないように見えます。

しかし、このノードの最大の特徴はPost Processタブの中にあります。

画像27. 「Pyro Post Processジオメトリノード」のPost Processタブ

上の画像を見ていただくとお分かり頂けるように、Convert to VDBというチェックボックスがあります。

DOP内でシミュレーションされたボリュームデータは「Standard Volume」で書き出されます。これはHoudini内でもともと用意されているボリューム形式で、ベクター型の値を3つのスカラー値で保持するという特徴があります。

画像28. ボリュームデータの比較

上の画像のように、チェックを切り替えた際に、保持されるボリューム形式と数が変わることが確認できるかと思います。

またこれに従って、メモリの削減も可能であることがわかります。

画像29. メモリ使用量の比較

大規模な爆発や火災のような表現を行う際には、このあたりの機能を使用するとメモリの使用に関してかなり差が出ることが考えられますので、チェックを入れておくと良いかと思います。

今回の記事は以上になります。
次回はPyro Configureに関する説明をさせていただきたいと思います。