すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

簡易的なVelocity VolumeでParticleを動かす

パーティクル系の動きを Advectしてそれっぽい動きにしたい際の簡単なVelocity Volumeの作り方

正確なVelocity Volumeを作成しているわけではないです。 それでもコリジョンオブジェクトを避けるかのような動きをParticleに与えることができます。 あとは、動いていないオブジェクトであればSOPだけでできるので軽いです。

hip file (Houdini 18.0.287)


particle advect test

以前使っていた際は、真面目にSmokeのシムをしていたんですが、以下で紹介されている方法を元に簡略化しました。

Houdini:Example-VellumSmokeSheetNo More Retake | No More Retake

動いているオブジェクトのVelocity

f:id:godofsuama:20200112203841p:plain 動いているオブジェクトはSmoke Solverでシムをかけます。

1.念のためTrailでvを計算しておく(上書きされる為意味はあまりない)

2.SDFにできる形状か(穴がないか)を確認し、必要ならConvex Decompositionなどでダミーオブジェクトを作る

3.DOPでSmoke Solverを使いシムをする f:id:godofsuama:20200112204113p:plain

Static Objectの変更点 f:id:godofsuama:20200112204319p:plain

・SOP Path

 読み込むオブジェクトを指定

・Create Convex Hull per Set of Connected Primitive

 繋がっているピース毎にコリジョンオブジェクトを作成する

Smoke Solverの変更点 f:id:godofsuama:20200112204810p:plain

・Use Volume Velocity for Collision

 基本的には問題ないが、Point数が変わるオブジェクト用に入れておく

4.後処理を行う

f:id:godofsuama:20200112205536p:plain

 1.DOPからはvelのみを保存する

 2.Volume MixやVolume Blurなどで調整したい場合は調整する

 Volume BlurBlurすると範囲が広がるので強さを上げるよりも見た目が良くなることがある

 3.Convert VDBでVDBに変換する

 4.VDB Vector MergeでVectorのVDBに変換する

動かないオブジェクトのVelocity

f:id:godofsuama:20200112205911p:plain

動かないオブジェクトの内側に入らないように外へ向くVelocityを作ります。

1.Nからvを作成

2.VDB from PolygonでVDBに変換

 この際に穴が空いていたりする場合はちゃんと処理をする

3.VDB Potential Flowを使用します

 そのままNをvにするより若干結果が良いような気がします  ヘルプ

4.Outputされるvelocity fieldの名前がflowvelなので、それだけを取り出し場合によってはリネーム

空間を満たすVelocity

f:id:godofsuama:20200112211210p:plain

1.Velocity Fieldを作りたい空間をBoxやBoundで作成する

2.VDB from PolygonでFog VDBに変換する

3.Volume VOPでノイズを利用して環境のVelocityを作る

f:id:godofsuama:20200112211541p:plain

・envVelDirection

 指定した方向へ流したい場合

・flowVelMult

 動かないオブジェクトのVelocityを念のため追加した場合の係数

4.VDB Project Non-Divergentを使用する

 ノイズが局所的に詰まってしまったりするのを改善します。  ヘルプ

5.必要であればリネーム

POPでの使い方

f:id:godofsuama:20200112212203p:plain

1.POP Advect by Volumeなどで作成したVelocity FieldでAdvectします。 f:id:godofsuama:20200112212326p:plain

2.3種類をバラバラに作成している為、それぞれのバランスをいい感じにする必要があります。