Houdini の地形ツールを使った際の水の処理に関してこちらにまとめました。
使用したビルド: 16.0.618
シーンファイルへのリンクは一番下にあり。
1. 元のシーンの作成
- Houdini を起動、ビューポートで TAB->Heightfield を実行。Enter キーを押して確定。
- ネットワークエディタで heightfield_object1 をダブルクリックまたは i キーを押して中に入り、heightfield1 の出力から TAB->Heightfield Noise を実行。出来た heightfield_noise1 に表示フラグを合わせる (Shift+Enter でノード配置を確定すると自動的に表示フラグがこれに移る)。
- heightfield_noise1 の Noise Type を Sparse Convolution から Perlin に変更する。
- heightfield_noise1 の出力から TAB->Heightfield Erode を実行、Shift+Enter で確定し、出来た heightfield_erode1 に表示フラグを合わせる。
- Visualizer タブに行き、Compute Range ボタンをクリック。これによりランプの範囲が作成されたボリュームにあわせて正しい範囲に収まる。
- 再生ボタンを押して 60フレーム目まで再生し停止。
- 60フレーム目にいることを確認、heightfield_erode1 の出力から TAB->Time Shift を実行し、Shift+Enter で確定。timeshift1 ができる。
- Frame ラベル上で RMB->Delete Channels を実行。
- 挿入されていたエクスプレッションを削除し Frame の値を60に固定。これにより、このノードより下流ではタイムスライダを動かしても侵食シミュレーションが走らない。
- シーンファイルを保存 (water_begin.hip)。このシーンを元に水面の設定を行う。
2. 水面の設定
- 見てわかると思うが、地形状を青く走っている部分が水で川や湖沼になる。
- timeshift1 の出力から TAB->HeightField Visualize を実行。作成された heightfield_visualize1 で
- Update Material のプルダウンを Remove Material に設定。
- Update Tinting のプルダウンを Custom Tinting に設定。
- Color Layer に water を設定。
- Compute Range をクリック (Range が 0 から 15.7401 になるはず)。
water は水深を示し、0 は水が無く、15.7401(m) は一番深いところになる。 - timeshit1 に表示フラグを設定したまま、heightfield_erode1 を選択。Layers タブ以下にある Add Water Layer to Final Height Layer をオンにする。
左がオフで、右がオン。
オンにすると水面が出来るが、water の各値は変わらない。
3. 各種値の出力
heightfield (つまりは2Dボリューム) をポイント群に変換、各種値を Geometry Spreadsheet で確認する。
- timeshift1 の出力から枝分かれする要領で TAB->Convert HeightField を実行。
- Convert To は Polygon のまま。
- Density を 2 (にすると100万ポイント出来る、メモリが不安な人は1以下に設定)。
- Geometry Spreadsheet を開くと、height (標高)、flow (水量または流量)、flowdir (x,y,z: 流れの方向)、 water (水深) などを頂点単位で確認可能。
水面部分だけを残し、残りを削除するには以下の方法が有効。 - convertheightfield1 の出力で TAB->Delete を実行。出来た delete1 の
- Group に @water>0 と設定。'>'の前後にスペースは入れない。
- Operation を Delete Non-Selected に。
- Entity を Points に。
- delete1 の出力で TAB->Add を実行。出来た add1 で Delete Geometry But Keep the Points をオンにすると、ポイントを残してポリゴン面が消える。
- add1 の出力から TAB->Attribute Wrangle を実行。出来た attribWrangle1 の
- Run Over を Points に。
- VEXpression に
f@hue = atan2(@flowdir_z, @flowdir_x)/(2*$PI)+.5;
と入力。
- attribWrangle1 の出力から TAB->Color を実行。出来た color1 の
- Class を Points に。
- Color Type を Ramp from Attribute に。
- Attribute を hue に。
シーンファイル
h16_terrain_water.zip (102KB)
- water_begin.hip: #2 直前までのファイル
- water_points.hip: 最後まで行ったファイル
0 件のコメント:
コメントを投稿