パーティクル系の動きを Advectしてそれっぽい動きにしたい際の簡単なVelocity Volumeの作り方
正確なVelocity Volumeを作成しているわけではないです。 それでもコリジョンオブジェクトを避けるかのような動きをParticleに与えることができます。 あとは、動いていないオブジェクトであればSOPだけでできるので軽いです。
以前使っていた際は、真面目にSmokeのシムをしていたんですが、以下で紹介されている方法を元に簡略化しました。
Houdini:Example-VellumSmokeSheetNo More Retake | No More Retake
動いているオブジェクトのVelocity
動いているオブジェクトはSmoke Solverでシムをかけます。
1.念のためTrailでv
を計算しておく(上書きされる為意味はあまりない)
2.SDFにできる形状か(穴がないか)を確認し、必要ならConvex Decompositionなどでダミーオブジェクトを作る
3.DOPでSmoke Solverを使いシムをする
Static Objectの変更点
・SOP Path
読み込むオブジェクトを指定
・Create Convex Hull per Set of Connected Primitive
繋がっているピース毎にコリジョンオブジェクトを作成する
Smoke Solverの変更点
・Use Volume Velocity for Collision
基本的には問題ないが、Point数が変わるオブジェクト用に入れておく
4.後処理を行う
1.DOPからはvelのみを保存する
2.Volume MixやVolume Blurなどで調整したい場合は調整する
Volume BlurでBlurすると範囲が広がるので強さを上げるよりも見た目が良くなることがある
3.Convert VDBでVDBに変換する
4.VDB Vector MergeでVectorのVDBに変換する
動かないオブジェクトのVelocity
動かないオブジェクトの内側に入らないように外へ向くVelocityを作ります。
1.Nからvを作成
2.VDB from PolygonでVDBに変換
この際に穴が空いていたりする場合はちゃんと処理をする
3.VDB Potential Flow
を使用します
そのままNをvにするより若干結果が良いような気がします ヘルプ
4.Outputされるvelocity fieldの名前がflowvel
なので、それだけを取り出し場合によってはリネーム
空間を満たすVelocity
1.Velocity Fieldを作りたい空間をBoxやBoundで作成する
2.VDB from PolygonでFog VDBに変換する
3.Volume VOPでノイズを利用して環境のVelocityを作る
・envVelDirection
指定した方向へ流したい場合
・flowVelMult
動かないオブジェクトのVelocityを念のため追加した場合の係数
4.VDB Project Non-Divergent
を使用する
ノイズが局所的に詰まってしまったりするのを改善します。 ヘルプ
5.必要であればリネーム
POPでの使い方
1.POP Advect by Volume
などで作成したVelocity FieldでAdvectします。
2.3種類をバラバラに作成している為、それぞれのバランスをいい感じにする必要があります。