Houdini 18 SparsePyro 04 “Example”


本記事では、Houdini18.0で追加されたPyroに関するノードと機能についてご紹介します。

今回は第4回目としまして、第3回目でご紹介しました「Pyro Configure」をベースとして、爆発の表現を作成する流れをご紹介していきます。

※本記事ではHoudini18.0.348を使用しております。

画像1. サンプル画像

サンプルファイルを配布致しますので、パラメータの詳細につきましてはこちらをご確認いただければと思います。

1.  爆発の作成

まず初めに、爆発の作成を行います。
「Pyro Configure Fireball 」をベースにして作成する方法をここでは行います。

1.「Geometry オブジェクトノード」を作成して中に入り、前回の記事にてご紹介しました「Pyro Configure Fireball」をTab Menuから選択してネットワークを作成します。

画像2. 「Pyro Configure Fireball」によるネットワークの作成

2.「fire_base」と「create_burn」の間に「Clipジオメトリノード」を接続します。後ほどパーティクルを使用するのですが、その際にNormalアトリビュートを使用して向きを決めます。その際に、上方向のみに移動するパーティクルの動きがほしいので、ベースオブジェクトの上面だけを残しています。

画像3.「Clipジオメトリノード」の追加

3.「Normalジオメトリノード」を作成して、「clip1」と「create_burn」の間に接続します。Normalアトリビュートは後ほど、パーティクルが進行する向きとして活用します。

画像4. 「Normalジオメトリノード」の追加

4.「Attribute VOPジオメトリノード」を作成し、「normal1」「create_burn」の間に接続します。これは、NormalアトリビュートをVelocityアトリビュートとして持たせるために接続しています。

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

「attribvop1」の中では、下の画像6のようにNormalから任意の数値を掛け合わせて、NormalとVelocityに渡すだけの簡単な処理を行っています。

画像6. 「attribvop1」の内部

5.SOP階層に戻り、「attribvop1」と「create_burn」の間に「Scatterジオメトリノード」を作成します。これを、パーティクルの発生源として使用します。

画像7. 「Scatterジオメトリノード」の追加

6.「scatter1」と「create_burn」の間に「POP Network」を作成します。パーティクルは、3フレーム目まで放出するように設定しています。
後ほど、ここで作成したパーティクルからベースとなるボリュームを作成していきます。

画像8. 「POP Network」の追加

再生すると下の画像9のように、先ほど設定したNormalの向きに従ってパーティクルが進みます。

画像9. パーティクルの挙動

7.「popnet」と「create_burn」の間に、「Trailジオメトリノード」と「Time Shift ジオメトリノード」を接続します。「Trailジオメトリノード」はボリュームの元となるパーティクルを増やすために使用し、「Time Shift ジオメトリノード」は1フレーム目からの発生を防ぐ目的で使用しています。

画像10. 「Trailジオメトリノード」と「Time Shift ジオメトリノード」の追加

8.「create_burn」のパラメータを一か所だけ変更します。デフォルトでは、ModeがVolume Scatterとなっていますが、これをKeep Inputに変更し、入力に接続されたジオメトリに対して処理が行われるように変更します。

画像11. Modeパラメータの変更


画像12. 爆発の完成

以上が作成の流れとなります。「Pyro Configure Fireball」をベースとして使用することで、基本的なアトリビュートの作成やボリュームへの受け渡しは済んでいる状態で作成を進めることができます。またパーティクルをソースボリュームとして使用することで、爆発の範囲やタイミングも調節しやすくなるかと思います。

2.  煙の作成

爆発によって生じた破片の飛び散りなどの際に、煙の軌跡が形成されることがあります。これを先ほどの爆発とは別に作成していき、最終的に組み合わせていきます。

ここでは「Pyro Configure Billowy Smoke」の一部を使用して作成していきます。

1.Tab Menuから「Pyro Configure Billowy Smoke」を選択して作成します。

画像13. 「Pyro Configure Billowy Smoke」によるネットワークの追加

2.ここでは、煙の作成に必要なアトリビュートを作成するノードとVDBに変換するノードおよびパラメータの設定を利用したいので、「create_density」と「rasterize1」のみ残して残りは削除します。

加えて、「scatter1」と「create_density」を接続します。

画像14. 「scatter1」と「create_density」の接続

3.「scatter1」と「create_desnity」の間に「POP Network」を接続します。煙の作成につきましても、同じようにパーティクルをソースボリュームとして使用します。

画像15. 「popnet1」の追加

4.「popnet1」と「create_density」の間に「Attribute Wrangleジオメトリノード」を作成します。ここでは、パーティクルの位置がy軸方向の原点を下回った時に、削除をするために設定しています。

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

5.「attribwrangle1」と「create_density」の間に「Time Shift ジオメトリノード」を接続します。爆発の作成時と同じように、1フレーム目から表示されることを防ぐために用意しています。

画像17. 「Time Shift ジオメトリノード」の追加

6.「create_desnity」のModeをVolume ScatterからKeep Inputに変更し、パーティクルに対してアトリビュート持たせることができるように設定します。

画像18. Modeパラメータを変更 (「create_density」)

7.煙をトレイルさせるための設定は「rasterize1」で設定を行います。densityアトリビュートのCoverage ScaleとVelocity Blurの調節を行うことで軌跡の作成を行うことができます。

画像19. トレイルの設定

8.爆発用のパーティクルと煙用のパーティクルを「Mergeジオメトリノード」を使用して合わせ、「pyrosolver1」に接続します。

画像20. ソースボリュームの合成

9.「pyrosolver1」の「Sourcing」タブはシミュレーションに使用するボリュームデータを読み込みます。下の画像21のように、「pyrosolver1」の「Sourcing」タブを見るとdensityの情報が読み込まれていないので、ソースボリュームと、適用するフィールドにdensityを指定します。

また、「Pyro Solverジオメトリノード」につきましては、第2回の記事でご紹介しています。

画像21. densityフィールドの作成

以上が作成の流れになります。トレイルされない、あるいは濃度が薄い場合はdensityのスケール値に関するパラメータを調節することで表示されるようになります。

また、パーティクルの寿命が短く設定されている場合、煙が放出される前にパーティクルが消えてしまうことがよくあります。ここではパーティクルがボリュームのベースとして使用されるので、パーティクルが消えてしまうとソースボリュームも消失してしまいます。パーティクルの寿命を少し長めに確保することで、ソースボリュームを長めに表示させることができます。

そのため、煙が上手く表示されない場合にパーティクルの寿命を調節することは有効であると言えます。

画像22. 最終画像

「Pyro Configure」を活用した爆発表現の作成は以上になります。

本記事ではかなり簡易的に作成をし、その流れをご紹介しましたが、あくまで一例とお考え下さい。シェルフツールも同様ですが、0から設定を行う必要がない点において有用な機能だと言えます。

煙、炎、爆発などの気体の表現を行う際には、是非活用していただければと思います。