Fluid ボリュームのカリング
View Frustum 外にはみ出るパーティクルを削除して Fluid シミュレーションを軽くする方法を紹介する。
大まかな流れは、カメラの Frustum (ビューボリューム) を元にボリュームデータを作成、それを元にした操作によって、外側に出るパーティクルを削除する。
使用バージョン: Houdini FX 13.0.566
参考シーンファイルへのリンクは一番下にあり。
1. Fluid シーンの作成
- Create シェルフから Sphere を作成。Translate を 0, 5, 0 にし、原点より5上に来るようにする。
- 作成したSphere を選択したまま、Particle Fluids シェルフから、FLIP Fluid from Object (一番左) を実行。FLIP 流体シミュレーションを作成する。
- AutoDopNetwork 内に入り、flipfluidobject1 の Initial Data 以下の Closed Boundaries を オンにする。
- flipsolver1の Volume Motion タブの Box Size を 10, 10, 10 にする。
- シミュレーションを再生し、流体が広がった(上記設定で 160フレーム目ぐらい) ところで以下のカメラの設定を行う。
2. カメラを追加
- no cam となっているビューポートのカメラをドリーインして、画角に流体の一部だけが表示されるようにする。
- この状態で、Lights and Cameras シェルフから、Ctrlキーを押しながら Camera (一番左) を実行。見ているままの状態で新しいカメラが作成される。
- カメラ (cam1) の View タブから Resolution を 640x480から 右側の▼を使って、HD720 (1280x720) に変更しても良いかもしれない。
- アスペクト比変更後にカメラを移動する場合には、ビューポート右側 上から二つ目の ロックアイコン (Lock camera/light to view) をオンにした上で、移動を行う。
カメラの設定が終わったあとには Lock アイコンをオフにしておくのが無難。
ここまで行ったのが、 01_frustumCulling_setup.hip
3. ビューボリュームの作成
ビューボリュームの作成は、/obj/sphere_object1_fluid 内で行う。
- sphere_object1_fluid 内に入り、Volume ノード (volume1) を作成。この時点では他のノードには接続していない。
- カメラが cam1 のままでロックがかかっている場合 ("cam1 (L)" となっている)には、ロックを解除の上、カメラを引いてみて全体を俯瞰してみると、カメラの frustum に応じてビューボリュームがボリュームで表示されている。
4. ボリュームアトリビュートの定義
次に、Attribute from Volume ノード (attribfromvolume1) を作成。
として、5. Delete ノードの作成と接続
- attribfromvolume1 の出力から Delete ノード (delete1) を作成。
- Operation: Delete Selected
- Entity: Points
- Operation Delete by Expression
- Filter Expression $FRUSTUM < 1
-
この delete1 の結果を vdbfromparticlefluid1 に接続。既存の接続を置き換える。
この状態で表示フラグを下流、下から2番目の surface_cache に合わせ、カメラを cam1 に戻してみる。
するとカリングされたパーティクルを元に作られたボリュームは ビューボリュームよりもひけてしまっているのがわかる。
6. Transform ノードの追加と接続
そこで、volume1 と attribfromvolume1 の間に Transform ノード (xform1) を挿入し、ボリュームを心持ち大きくする。
これにより、Volume が 少し大きめになる。
7. まとめ
この方法によりビューボリュームの大きさに合わせた流体ボリュームを作成することが出来た。最終的なネットワークはこのようになる。
参考シーンファイル:
- frustumCulling.zip (278KB)
0 件のコメント:
コメントを投稿