ポリゴンメッシュの角を見つけるには?頂点の隣接数カウントで簡単判定

Houdini,Houdini自習室,VEX

四角形のオブジェクトの角を取得したい場合は、各ポイント(頂点)に隣接しているポイントの数を調べることで判別できます。

例えば、2x4(Row=2, Col=3)のポイント構成で作られた四角形を考えると、隣接するポイントの数は以下のようになります。

  • 四隅のポイントは 2 個
  • 外周の辺上(角以外)のポイントは 3 個
  • 内部のポイントは 4 個

下の画像を例に、ポイント P1 を見てみましょう。

P1 に隣接するポイントは P2 と P5 の2つです。 「P6 も隣接しているのでは?」と思うかもしれませんが、P6 とはエッジ(辺)を共有していないため、ポリゴンメッシュの構造上「隣接頂点」とは見なされません。

実装例

Grid ノードに Attribute Wrangle を接続します。

次の VEX を記述します。

if neighbourcount(0, @ptnum) == 2){
    @Cd = set(1, 0, 0);
}

Rows や Columns の値を変えても、四隅だけが赤くなることを確認できるはずです。

この考え方を使えば、立方体になった場合でも同様に四隅(角)の頂点を取得することができます。立方体の各角は、3 本のエッジだけを持つため、隣接する頂点の数が 3 になります。したがって、neighbourcount() の結果が 3 のポイントを抽出すれば、立方体の8つの角を特定できます。

if neighbourcount(0, @ptnum) == 3){
    @Cd = set(1, 0, 0);
}

参考: 挫折させないHoudiniドリル