Fluid Volume Culling

Fluid ボリュームのカリング

View Frustum 外にはみ出るパーティクルを削除して Fluid シミュレーションを軽くする方法を紹介する。

大まかな流れは、カメラの Frustum (ビューボリューム) を元にボリュームデータを作成、それを元にした操作によって、外側に出るパーティクルを削除する。

使用バージョン: Houdini FX 13.0.566

参考シーンファイルへのリンクは一番にあり。

1. Fluid シーンの作成

  1. Create シェルフから Sphere を作成。Translate を 0, 5, 0 にし、原点より5上に来るようにする。
  2. 作成したSphere を選択したまま、Particle Fluids シェルフから、FLIP Fluid from Object (一番左) を実行。FLIP 流体シミュレーションを作成する。
  3. AutoDopNetwork 内に入り、flipfluidobject1 の Initial Data 以下の Closed Boundaries を オンにする。
  4. flipsolver1の Volume Motion タブの Box Size を 10, 10, 10 にする。
  5. シミュレーションを再生し、流体が広がった(上記設定で 160フレーム目ぐらい) ところで以下のカメラの設定を行う。

2. カメラを追加

  1. no cam となっているビューポートのカメラをドリーインして、画角に流体の一部だけが表示されるようにする。
  2. この状態で、Lights and Cameras シェルフから、Ctrlキーを押しながら Camera (一番左) を実行。見ているままの状態で新しいカメラが作成される。
  3. カメラ (cam1) の View タブから Resolution を 640x480から 右側の▼を使って、HD720 (1280x720) に変更しても良いかもしれない。
  4. アスペクト比変更後にカメラを移動する場合には、ビューポート右側 上から二つ目の ロックアイコン (Lock camera/light to view) をオンにした上で、移動を行う。

    カメラの設定が終わったあとには Lock アイコンをオフにしておくのが無難。

ここまで行ったのが、 01_frustumCulling_setup.hip

3. ビューボリュームの作成

ビューボリュームの作成は、/obj/sphere_object1_fluid 内で行う。

  1. sphere_object1_fluid 内に入り、Volume ノード (volume1) を作成。この時点では他のノードには接続していない。
    • Rank: Scalar
    • Name: density
    • Initial value: 1, 1, 1
    • From Camera
    • Camera: /obj/cam1
    • Z Near: 1 (のまま)
    • Z Far: 16 (から20 くらい)
    • Uniform Sampling 50 (くらい)
  2. カメラが cam1 のままでロックがかかっている場合 ("cam1 (L)" となっている)には、ロックを解除の上、カメラを引いてみて全体を俯瞰してみると、カメラの frustum に応じてビューボリュームがボリュームで表示されている。

4. ボリュームアトリビュートの定義

次に、Attribute from Volume ノード (attribfromvolume1) を作成。

  • Attribute Name: frustum
  • Attribute Type: Float
  • Attribute Size: 1
  • Default: 0 0 0

として、
  • 左側の入力に keepponlypoints を接続
  • 右側の入力に volume1 を接続。

5. Delete ノードの作成と接続

  1. attribfromvolume1 の出力から Delete ノード (delete1) を作成。
    • Operation: Delete Selected
    • Entity: Points
    • Operation Delete by Expression
    • Filter Expression $FRUSTUM < 1
    として delete1 に表示フラグを指定すれば、流体パーティクルがカリングされているのがわかる。
  2. この delete1 の結果を vdbfromparticlefluid1 に接続。既存の接続を置き換える。

この状態で表示フラグを下流、下から2番目の surface_cache に合わせ、カメラを cam1 に戻してみる。

するとカリングされたパーティクルを元に作られたボリュームは ビューボリュームよりもひけてしまっているのがわかる。

6. Transform ノードの追加と接続

そこで、volume1 と attribfromvolume1 の間に Transform ノード (xform1) を挿入し、ボリュームを心持ち大きくする。

  • Pivot にそれぞれ $CEX $CEY $CEZ (Centroid X, Y, Z: 重心の X, Y, Z) を追加
  • Uniform Scale で 1.02 ~ 1.05 ぐらい。
これにより、Volume が 少し大きめになる。

7. まとめ

この方法によりビューボリュームの大きさに合わせた流体ボリュームを作成することが出来た。最終的なネットワークはこのようになる。

参考シーンファイル:

0 件のコメント:

コメントを投稿