LoginSignup
15
11

More than 3 years have passed since last update.

HoudiniでUVのシームエッジを取得

Last updated at Posted at 2020-04-07

概要

HoudiniでUVのシームエッジを取得する方法を3つ紹介します。
バージョンは18.0.287を使用しています。

使用例

Remeshする時にHard Edgesに取得したグループを指定するとUVを保持して、Remesh出来ます。

四角形化でシームエッジを保持する時に使えます。

Heightマップを使ったディスプレイスを行う時にシームエッジの箇所のみぼかすことで破綻を防ぐ事が出来ます。

手法1

一つ目はGroup from Attribute Boundaryノードです。
デフォルト設定で繋げるだけでUVのシームエッジをグループにしてくれます。

手法2

2つ目はVertex SplitGroup Transferを使った方法です。
Vertex Splitにuvを指定するとシームエッジの箇所でポリゴンを分けてくれます。

そこにGroup Createノードを繋ぎ、Unshared Edgeにチェックを入れるとシームエッジの箇所にグループが作られます。
そのままではトポロジーが変わってしまうので、Group Transferでグループを転送します。
この時、Distance Thresholdを0.001など小さい値にしないと正しく転送されないので、ご注意下さい。

手法3

3つ目の方法はAttribute Wrangleを使用した方法です。
2つ目と同様にVertex Splitを繋いだ後に、元ジオメトリを1つ目のインプット、2つ目にVertex Splitを繋げ、Run OverVerticesにしてから、下記コードを入力します。

int edge = vertexhedge(0, @vtxnum);
if (hedge_equivcount(1, edge) == 1)
{
    int src_pt = hedge_srcpoint(0, edge);
    int dst_pt = hedge_dstpoint(0, edge);
    setedgegroup(0, "seams", src_pt, dst_pt, 1);
}

処理速度

以上3つの方法の処理速度を計ってみます。
軽いモデルだと差が分かりづらいので、豚さんにSubdivideを3段階掛けた状態で計測してみます。

少し見にくいですが、それぞれの処理速度は

  • 手法1:2.026秒
  • 手法2:0.713秒
  • 手法3:0.100秒

となりました。やはりAttribute Wrangleは速いですね!
Group from Attribute Boundaryは標準ノードなのに思ったより遅いという結果になりました。

まとめ

以上HoudiniでUVシームを取得する方法でした。
ちなみに紹介した手法はいずれもアトリビュートの境界を取得するものなので、例えばNを指定する事でハードエッジの取得にも使えますし、shop_materialpathを指定する事でマテリアルの境界を取得する事も出来ます。

15
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
11