Unwrap_UVW モディファイヤの[フラットにする]オプションを使用して、UV 座標をスレッショルド角度に基づいて要素に分割し、テクスチャを簡単にすることができます。次のスクリプト関数では、対応するマップ面に基づいてメッシュの面をデタッチすることができます。インデックス同士は
1 対 1 で対応しているので、この作業は比較的単純です。「テクスチャ座標について」を参照してください。
スクリプト:
|
fn splitMeshByUVElements mesh channel =
(
local obj = copy mesh--元のオブジェクトをコピーします。
convertToMesh obj--編集可能メッシュに変換します。
while obj.numfaces > 0 do--すべての要素をデタッチするまで繰り返します。
(
face_array = #(1)-- 面 1 のみを含む配列を初期化します。
cnt = 0-- カウンタを初期化します。
-- カウンタが配列内の面の数を超えるまで繰り返します。
while cnt < face_array.count do
(
cnt += 1 --iカウンタを加算します。
-- コレクション配列内の現在のマップ面によって使用されているすべてのマップ頂点を取得します。
theVerts = meshop.getMapVertsUsingMapFace obj channel #(face_array[cnt])
-- これらのマップ頂点によって使用されているすべてのマップ面を取得します。
-- これによって、現在のマップ面に隣接するすべての面が示されます。
theFaces = meshop.getMapFacesUsingMapVert obj channel theVerts
-- 配列に書き込まれる面が一意になるようにします。
for f in theFaces where findItem face_array f == 0 do
append face_array f
)--while cnt を終了します。
-- 要素内のすべての接続面が収集されたら、
-- 新しい空の編集可能メッシュを作成します。
new_emesh = Editable_mesh()
-- 収集した面をデタッチして、編集可能メッシュの TriMesh に割り当てます。
new_emesh.mesh = meshop.detachFaces obj face_array delete:true asMesh:true
-- 元のオブジェクトの変換をコピーします。
new_emesh.transform = mesh.transform
-- 元の名前に基づいて一意の名前を割り当てます。
new_emesh.name = uniquename (mesh.name +"_UVsplit")
)--while numfaces 終了
delete obj--この時点で面を持たないクローンを削除します。
)
-- 使用例:
splitMeshByUVElements $Teapot01 1
|