例えば、下図の様な地形があったとする。
これは、heightfield に HeightField Scatter でポイントを散らし、そこに Mountain ノイズをかけたポリゴン球をコピーしたもの。よって岩同士は重なり合っているだけで、地中にもぐれば、地上から見えない面があるのがわかる。
これら見えない面を削除する方法を2つ紹介したい。
使用したビルド: Houdini 17.0.508
シーンファイルは一番下からダウンロード可能
1. Boolean を使う
もっとも手っ取り早い方法は Boolean ノードを追加すること。
これだけで、裏側の面や重なった部分が一発でキレイに削除される。
Detriangulate (非三角形化)の設定を変えることで、三角形分割量を変更可能。
- All Polygons (デフォルト): Boolean 結果による面すべてに対し非三角形化を行う。N角形が残る。
- No Polygons: どの面にも非三角形化を実行しない。つまり全部三角形。
- Only Unchanged Polygons: トポロジが変わらなかった面に非三角形化が行われる。つまりトポロジが変わった面のみに三角形化が行われる。N角形は残らない。
2. GameDev: Calculate Occlusion ノードを使う
Game Development Toolset にある Calculate Occlusion ノードを使うことで、アンビエントオクルージョンを元にした面の削除が可能。
- 地形形状 (OUT ノード) の出力に GameDev: Calculate Occlusion ノード (sop_calculate_occlusion1) を追加。この形状の場合、
- Maximum Ray Distance を 1000
- Intensity を 1.2
- Gamma を 30
- Advanced 以下にある Cone Width を 90
地中は以下のようになっている。 - sop_calculate_occlusion1 の出力に Blast ノード (blast1) を接続。
リンク
- Game Development Tips and Tricks | Luiz Kruel | GDC 2018 (18:30ぐらいから)
- GameDev: Calculate Occlusion
- 地形 | HEIGHTFIELD SCATTER | H17 MASTER CLASS
- シーンファイル: h17_terrain_hiddenface_removal.zip (91KB)
- terrain_boolean_occlusion_1.hip: 元の地形ファイル
- terrain_boolean_occlusion_2.hip: 1と2の処理を加えたもの
0 件のコメント:
コメントを投稿