2019-03-07

houdini terrain hidden face removal

例えば、下図の様な地形があったとする。

これは、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 ノードを使うことで、アンビエントオクルージョンを元にした面の削除が可能。

  1. 地形形状 (OUT ノード) の出力に GameDev: Calculate Occlusion ノード (sop_calculate_occlusion1) を追加。この形状の場合、
    • Maximum Ray Distance を 1000
    • Intensity を 1.2
    • Gamma を 30
    • Advanced 以下にある Cone Width を 90
    とすると、以下のように表示される。

    地中は以下のようになっている。
  2. sop_calculate_occlusion1 の出力に Blast ノード (blast1) を接続。
    • Group に @Cd.x=0 と入力 (= の前後にスペースを入れてはいけない)。
    • Group を @Cd.x<0.1 と入力 (< の前後にスペースを入れてはいけない)するとさらに削除部分が広がる。
こちらの方法であれば、削除の範囲をコントロールできるので状況によってはこの方法が望ましいかもしれない。

リンク

0 件のコメント:

コメントを投稿