LoginSignup
7
5

More than 3 years have passed since last update.

【Houdini】煙で衝撃波エフェクトっぽいものを作ってみた

Posted at

はじめに

Houdiniを使って以下のような煙エフェクトを作ってみました。 
1.gif

Netflixで配信されているケンガンアシュラのOPの煙エフェクトを見た時に思いつきました。



今回はこのエフェクトの作り方を軽くご紹介いたします。

STEP1 : 煙の発生元のジオメトリ作成

まずはobj階層にgeometryノードを作成します。 ノード名はSourceとします。
image.png

Sourceノードの中に入り、Tubeノードを作成します。
image.png
image.png

以下のようなモデルが作成されます。
今回はこのモデルを煙の発生源として使用します。
image.png

STEP2 : 煙シミュレーションの作成

Sourceノードをクリックした状態でBillowy Smokeシェルフをクリックして、煙エフェクトを作成します。
image.png

obj直下に煙に関連するノード群が作成されます。
image.png

STEP3 : Sourceノードに手を加える(速度の追加)

Sourceノードの中身

Sourceノードの中に入ると、以下のようなノード構成になっています。
先ほど作成したtube1が最終的に
density(密度)とtemperature(温度)を持ったボリュームとして出力されるようなノード構成となっています。
image.png

これらのノードのパラメータを変更することで、煙のふるまいが調整できるようになっているので触ってみると面白いと思います。

速度vを持つボリュームを追加する

ここに、以下のようなノード群を新しく追加します。
image.png

Boundノード (箱の作成)

tube1を覆うような箱(バウンディングボックス)を作成します。
image.png
image.png

VDB from Polygonsノード(ボリュームに変換)

モデルをボリュームに変換します。
ここではFog VDBのチェックを入れることで、densityを持ったボリュームを作成しています。
image.png
image.png

Scatterノード(ポイントをばら撒く)

densityを持ったボリュームにScatterを適用し、ポイントをばら撒きます。
今回はdensityが偏りなく分布しているため、ポイントも偏りなくばら撒かれます。
image.png

image.png

Attribute Wrangleノード(速度フィールドの作成)

速度アトリビュート@vを作成します。
image.png

原点を中心としてxz方向に放射状に広がる速度の大きさをコントロールするパラメータvel_sideと、
y方向の速度の大きさをコントロールするパラメータvel_upを使って速度@vを合成しています。

attributewrangle1
vector np = normalize(@P) * chf("vel_side");
v@v = set(np.x, chf("vel_up"), np.z);

速度@vをVisualilzeノードで可視化すると以下のようになります。
image.png

Attribute VOP(速度vにノイズを合成する)

Attribute VOPを作成します。
image.png

Attribute VOPの中ではTurbulent Noiseノードを利用して速度vにノイズを合成しています。
image.png

ノイズのパラメータは以下のように設定しました。
image.png

VDB from Particles(ポイントをボリュームに変換)

最後にVDB from Particlesを使ってポイントをボリュームに変換します。
Attribute の部分にvを設定することで、ポイントが持つアトリビュート@vをボリュームに持たせています。
image.png

Nullの作成

最後にNullノードを接続し、速度を出力するものだということを明示するためにノード名をOUT_VELとして完成です。
image.png

ノード全体

image.png

補足 : Visualizeノードを利用した速度の可視化

Visualizeノードを以下のように設定すると速度@vを表示することができます。
image.png

image.png

STEP4: pyro_simに手を加える

pyro_simの中身

obj直下にあるpyro_simの中に入ります。

image.png

pyro_simの中は以下のようなノード構成になっているはずです。
image.png

pyro_simから速度フィールドを参照する

Volume Sourceノードを作成します。
image.png

Volume Sourceのパラメータは以下のように設定します。
先ほど作成したOUT_VELノードが持つ速度vを煙の速度velに毎フレーム加算するような設定にしています。
image.png

作成したVolume Sourceノードをpyro_simの左から3番目のインプットコネクタに接続します。
image.png

以上で煙のシミュレーションで速度vが利用されるようになります。

density(密度)を変更する

pyro_simの中に元から居る source_density_from_Source は以下のようなパラメータ設定にします。
image.png

pyro_solverの設定

pyro_solverのパラメータも変更します。
今回触るのはSimulationとShapeの二つです。

image.png

Simulationタブ

image.png

Shapeタブ

image.png

完成

ここまでの設定を終えると、以下のような煙になるはずです。(ならなかったらごめんなさい)
1.gif

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5