Created on | Updated on
フォローする

カーブの長さにそってパイプのUVを設定する

 

Sweepを使用してカーブに沿ったパイプを作成した場合に、UVをカーブの長さに合わせたいと思います。

まずは、パイプを作成します。

これでジオメトリは作成できますが、UVは持っていません。

UV TextureノードをカーブとSweepの間に追加します。

UV TextureノードでTexture TypeをArc Lengthに設定し、Attribute ClassをPointにします。

UVEditorを確認すると以下のようにカーブのUVが生成されます。

この状態だとカーブを移動しても、それにあわせてUVが変わることはありません。

そこで、UV TextureノードのScale Xに以下のエクスプレッションを追加します。

arclen("../curve1", 0,0,1)

arclenは描いたカーブの長さを取得することができます。

Curve1は求めるカーブ、その次の0はプリミティブ番号、その次の0はUの開始値、最後の1はUの終了領地になします。

これでカーブのポイントを移動すると、それに応じてUVの位置が変わるようになります。

これをもとに、パイプジオメトリにUVを設定します。

SweepのOutputにuvと入力し、カーブのUVをジオメトリに渡します。

pointVopを接続します。

pointvopの中に入ります。

moduloを作成します。このオペレーターは名前の通りモジュロ演算を行います。
※Wikiより、剰余演算モジュロとも呼ぶ)は、コンピュータにおいて、ある数値を別の数値(法と呼ばれることもある)で除算し、余りを取得する演算である。

geometryVopGlobalのptnum(ポイント番号)をmoduloのinput1に入力します。

このパイプはDivision=12のCircleから作成されています。
そのため、作成されたポイント番号も0から始まり12までで1つの繋がりを作成し、次にセクションが作成されています。

UVを作成する場合、0から12まで(1サークルのポイント数)までで1つの区切りとしてこれを縦の軸していきます。

ということで、取得したptnumをサークルのポイント数を使用してモジュロします。

paramオペレーターを作成し、名前そslidesに設定します。
TypeはCircleのポイント数を入力するためIntegerにします。

paramオペレーターを追加すると、その上部であるpointVopノードのslidesという名前のパラメーターが追加されたことがわかります。

CircleのDivisionをCopy Paramterして、

pointVopのslidesにPaster Relative Referenceします。

 

ただし、このままだと12という数字が入力されてしまいます。実際には0から開始し、12までとなるので常にCircleのDivisionに+1した数値が必要です。

add constを追加し、1を追加します。

Add constの結果をmoduloに接続します。

これで、常に0から12の間に数字がクランプされます。

次にこの0から12までの数字で0から1の間に等間隔に並ぶようにします。

12を0-1に等間隔に並べるためのXは1割るslidesで算出できます。

constantオペレータで1という数字を作成し、それをslidesで除算します。

その結果をMuduloで計算された0-12の数字にかければ、Vの値が決まります。

この結果の計算値は常にfloatなので、UVにするためにfloattovectorを作成し、fval2(つまりはv)に接続します。

更に2つ目のparamを追加します。

ここには、先ほどカーブに設定したUVをもってきます。

Nameをuvにします。popvop

paramオペレーターはNameに既に存在するパラメーターを入力すると、そのパラメーターを参照するようになります。今回はuvとしたので、このpointvopに入力した時点で持っているuvの値を参照します。

これでUとVの値を作ることができたので2つのVecotを足し算します。

最後にBindを作成します。

bindのNameをuvとし、TypeをVector(float)に設定します。
Use This Node to Set Parameter Attributesを有効にします。
ExportをWhen Input is Connectedに設定します。

Game Dev ToolsのUV Visualizeを接続してみると、元のカーブに合わせてUVが設定されていることがわかります。後からカーブを編集しても、UV Textureでカーブの長さからUの値を取得しているので、常にこの状態を保つことができます。

0 コメント

記事コメントは受け付けていません。