2017-05-30

terrain water

Houdini の地形ツールを使った際の水の処理に関してこちらにまとめました。



使用したビルド: 16.0.618
シーンファイルへのリンクは一番下にあり。

1. 元のシーンの作成

  1. Houdini を起動、ビューポートで TAB->Heightfield を実行。Enter キーを押して確定。
      ビューポートには一枚のグレーの板が表示され、ネットワークビューには、heightfield_object1 というノードが出来たのがわかる。

      一辺が -500から +500 まで、1000m 四方であることがわかる。
  2. ネットワークエディタで heightfield_object1 をダブルクリックまたは i キーを押して中に入り、heightfield1 の出力から TAB->Heightfield Noise を実行。出来た heightfield_noise1 に表示フラグを合わせる (Shift+Enter でノード配置を確定すると自動的に表示フラグがこれに移る)。
  3. heightfield_noise1 の Noise Type を Sparse Convolution から Perlin に変更する。
  4. heightfield_noise1 の出力から TAB->Heightfield Erode を実行、Shift+Enter で確定し、出来た heightfield_erode1 に表示フラグを合わせる。
    • Visualizer タブに行き、Compute Range ボタンをクリック。これによりランプの範囲が作成されたボリュームにあわせて正しい範囲に収まる。
  5. 再生ボタンを押して 60フレーム目まで再生し停止。
  6. 60フレーム目にいることを確認、heightfield_erode1 の出力から TAB->Time Shift を実行し、Shift+Enter で確定。timeshift1 ができる。
  7. Frame ラベル上で RMB->Delete Channels を実行。
      挿入されていたエクスプレッションを削除し Frame の値を60に固定。これにより、このノードより下流ではタイムスライダを動かしても侵食シミュレーションが走らない。
  8. シーンファイルを保存 (water_begin.hip)。このシーンを元に水面の設定を行う。

2. 水面の設定

  1. 見てわかると思うが、地形状を青く走っている部分が水で川や湖沼になる。
  2. timeshift1 の出力から TAB->HeightField Visualize を実行。作成された heightfield_visualize1 で
    1. Update Material のプルダウンを Remove Material に設定。
    2. Update Tinting のプルダウンを Custom Tinting に設定。
    3. Color Layer に water を設定。
    4. Compute Range をクリック (Range が 0 から 15.7401 になるはず)。
    すると以下のような表示なるはず。

    water は水深を示し、0 は水が無く、15.7401(m) は一番深いところになる。
  3. timeshit1 に表示フラグを設定したまま、heightfield_erode1 を選択。Layers タブ以下にある Add Water Layer to Final Height Layer をオンにする。

    左がオフで、右がオン。
    オンにすると水面が出来るが、water の各値は変わらない。

3. 各種値の出力

heightfield (つまりは2Dボリューム) をポイント群に変換、各種値を Geometry Spreadsheet で確認する。

  1. timeshift1 の出力から枝分かれする要領で TAB->Convert HeightField を実行。
    1. Convert To は Polygon のまま。
    2. Density を 2 (にすると100万ポイント出来る、メモリが不安な人は1以下に設定)。
    以下のようなポリゴン形状になる(拡大図)。
  2. Geometry Spreadsheet を開くと、height (標高)、flow (水量または流量)、flowdir (x,y,z: 流れの方向)、 water (水深) などを頂点単位で確認可能。

    水面部分だけを残し、残りを削除するには以下の方法が有効。
  3. convertheightfield1 の出力で TAB->Delete を実行。出来た delete1 の
    1. Group に @water>0 と設定。'>'の前後にスペースは入れない。
    2. Operation を Delete Non-Selected に。
    3. Entity を Points に。
    すると水面の部分のポリゴンだけが残る。
  4. delete1 の出力で TAB->Add を実行。出来た add1 で Delete Geometry But Keep the Points をオンにすると、ポイントを残してポリゴン面が消える。
  5. add1 の出力から TAB->Attribute Wrangle を実行。出来た attribWrangle1 の
    1. Run Over を Points に。
    2. VEXpression に
      f@hue = atan2(@flowdir_z, @flowdir_x)/(2*$PI)+.5;
      と入力。
  6. attribWrangle1 の出力から TAB->Color を実行。出来た color1 の
    1. Class を Points に。
    2. Color Type を Ramp from Attribute に。
    3. Attribute を hue に。
    中央部分をズームして再生した結果がこちら。

シーンファイル

h16_terrain_water.zip (102KB)

  • water_begin.hip: #2 直前までのファイル
  • water_points.hip: 最後まで行ったファイル

0 件のコメント:

コメントを投稿