ポリラインからUVを設定したバンドメッシュをつくる

ノードネットワーク

左側はポリライン、右側が断面のポリライン。それぞれUVの、UとVの値を記録しておいて、Sweep SOPでメッシュ化した後、WrangleでUVを整理する流れ。

UV Texture SOP

Texture Type をArc Length Splineにする。Attribute ClassはPointに。

Scaleにarclen(0, 0, 0, 1)と入力。

arclen(0, 0, 0, 1)

引数は左から、ノード、プリミティブ番号、Uの開始値、Uの終了値。U値がワールド空間でのカーブの長さで保存される。

calc_uv_width (Point Wrangle)

断面カーブに正規化した各エッジの長さ(座標)を格納する。

//
// UVのuを長さの割合で0-1に収める
// RunOver: Detail
//

float length[];
float sum = 0;

for(int i = 1; i < npoints(0); i++)
{
    vector p0 = point(0, "P", i-1);
    vector p1 = point(0, "P", i);
    length[i] = length(p1 - p0);
    sum += length[i];
}

for(int i = 1; i < npoints(0); i++)
{
    length[i] /= sum;
}

sum = 1;
for(int i = 0; i < npoints(0); i++)
{
    sum -= length[i];
    setpointattrib(0, "__x", i, sum);
}

reset_uv (Point Wrangle)

断面方向には0-1のスケールでUVが設定され、進行方向には実際の長さの値が設定されている。

int uRepeat = 1;    // u方向のリピート数
float uvStep = 1;   // テクスチャ一枚を進行方向に何メートルで貼るか

@uv.y = @uv.x;  // 実際のメートルの値になっている
@uv.x = f@__x;

// UVの幅はリピート数
@uv.x *= uRepeat;
@uv.y /= uvStep;

V方向に伸びるように再構築している。

タイトルとURLをコピーしました