概要
HoudiniでUVのシームエッジを取得する方法を3つ紹介します。
バージョンは18.0.287を使用しています。
使用例
Remeshする時にHard Edgesに取得したグループを指定するとUVを保持して、Remesh出来ます。
四角形化でシームエッジを保持する時に使えます。
Heightマップを使ったディスプレイスを行う時にシームエッジの箇所のみぼかすことで破綻を防ぐ事が出来ます。
手法1
一つ目はGroup from Attribute Boundaryノードです。
デフォルト設定で繋げるだけでUVのシームエッジをグループにしてくれます。
手法2
2つ目はVertex SplitとGroup 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 OverをVerticesにしてから、下記コードを入力します。
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を指定する事でマテリアルの境界を取得する事も出来ます。