【Blender 5.1】カーブから作ったメッシュのUVを直す方法:ジオメトリノード

blender
記事内に広告が含まれています。

Blenderのジオメトリノードで、カーブからメッシュを生成したときに、
UVがうまくつながらず始点と終点の間で壊れて、綺麗なUVが作れないことがあります。

この問題は、UVを別途用意したり、複雑な処理を組むことで回避することもできますが、
Trim Curveノードを挟むだけでカンタンにUVが修正できます。

この記事では、

・なぜカーブのUVに隙間の破綻ができるのか
・なぜTrim Curveノードで改善されるのか

を、ジオメトリノードの挙動を踏まえて解説していきます。

スポンサーリンク

普通にUVを作成してみる

では普通にカーブからメッシュを作るとどうなるかやってみます。

まず、閉じたカーブ(Circle Curve)をプロファイルとして、ベジェ曲線に沿ってメッシュを作ります。

そのとき、元のカーブと、プロファイルのカーブのファクターをSpline Parameterから取得して、Combine XYZノードでベクターに合成します。

そしてメッシュ化した後に
Store Named Attributeノードで

  • タイプ…2D Vector
  • ドメイン…Face Corner

で名前をつけてベクターの値を保存します。(名前は何でもよいです)

マテリアルをつけると属性値を設定しなくても、UVが自動で出来ています。

すると、プロファイルにしたカーブの始点と終点の間でUVが壊れているのがわかります。(これはカーブのサンプル数を上げると目立たなくはなりますが、完璧に直ることはありません。)

スポンサーリンク

UVが壊れる原因と解決策

この現象の原因は、サイクリックカーブ(閉じたカーブ)におけるパラメータの不連続にあります。

閉じたカーブのファクター

カーブのFactorは、カーブ全体の長さに対して0〜1の値で割り振られます。
しかしカーブが閉じている場合、内部的には

0 → 1 → … → 0.9(終点) → 0.0(始点)

というように、最後の接続部分で0.9から0へ戻っています。(1つのポイントに2つの値は入らないため。)

見た目は滑らかにつながっていても、この数値上の不連続によって、UVの補間がうまくいかず、結果として破綻が発生します。

Trim Curveで再マッピング

ここでTrim Curveノードを挟むと、ポイント0の始点の位置にもう一つポイントが追加され、そこを1の終点としてファクターが再度マッピングされます。

そのためパラメータ(0〜1)が先頭から末尾まで連続するようになり、UVの補間が正しく行われるようになります。

※ただしループが切れます。

スポンサーリンク

UVを修正する最終的なノード

というわけで、閉じたカーブプロファイルを持つメッシュのUVを修正する最終的なノードを組んでみます。

さきほどのノードに、

  • Trim Curveノードを追加
    プロファイルにするCurve Circleの後につなぐ
    • 始点の位置に終点ポイントがきちんと来るようにする
  • Merge by Distanceノードを追加
    • カーブが切れたままメッシュ化しているため、切れた部分をつないでいます。
    • 2Dベクターを保存した後でつなぐ。(※保存する前につなぐとまたUVが破綻します。)

※ちなみにSet Spline Cyclicでループが切れたのを直そうとすると始点と終点の間に変な面が作成されてしまうので、Merge by Distanceで点をマージした方がいいと思います。

このようにノードを組むことで、カーブをきちんと閉じたままUVを修正できます。

カーブからメッシュを作ってUVでテクスチャを割り当てたいときって結構あると思いますので、2つノードを足すだけで解決できるのはとても便利だと思います。

ちなみにカーブのループが切れるとFill Capsができなくなってフタが作れなくなるので、以下にフタ付きの場合のノード構成も載せておきました。

スポンサーリンク

フタをしたい場合

少しノードを増やします。

  • まず、Fill Capsを有効にするにはカーブがループしてないといけないので、Set Spline CyclicCyclicをオンにしてまたループにします。
  • それから、ベースのベジェ曲線ですが、始点と終点の2点しかなかったのでResample Curveでポイントを10に増やしました。
  • フタ部分だけあとで選択できるようにEndpoint Selectionで、StartとEndを1つずつ選択してCapture Attributeに渡しておきます。
  • メッシュ化したあと、Endpoint Selectionの値をCapture AttributeでEdgeにキャプチャします。
  • UV Unwrapノードでフタ部分のエッジだけをSeamにしてUnwrapします。
  • Store Named Attributeで筒部分のUVを保存したあと、もう1つStore Named Attributeをつないで、フタ部分だけ選択して、さっきUnwrapしたUVを保存します。

これで綺麗なフタつきのUVも作れました。

※ちなみに途中で頂点が重なってるところがあるので最後のMerge by Distanceを忘れないようにしてください。

最初から全部普通にUV Unwrapすればいいのでは?って思って一回やってみたら、筒部分のUVがあまり綺麗になりませんでした。(うまくシームが切れればできるかもしれませんが…。)

それにしてもカーブメッシュのUV作るのめんどすぎですよね。おそらく近々カーブメッシュのUVが簡単に開けるノードが出る気がします。

スポンサーリンク

参考動画

スポンサーリンク

関連動画

  • カーブの接線・法線・従法線を解説:Tiltのトラブルを解決する
    カーブの接線・法線・従法線とは何かを解説し、Set Curve Normalノードを使ってねじれを修正する方法を説明
  • String to Curvesノード基礎
    文字列を3Dカーブとして扱い、ロゴやテキストオブジェクトをノードで制御する方法。
  • 回転系ノードについて解説
    インスタンスの回転、ベクトル回転、回転の補間やクォータニオンなど、回転系ノードの使い方を網羅。

ジオメトリノードの記事をまとめたガイド

コメント