前回の記事がこちら
早いもので、もうすぐ1年たちますね。
ようやく対処法が見つかりました。
なんだかんだこの状況結構多発してまして、
細々したパーツに大量発生すると対応に時間が掛かりすぎて嫌になってしまうので、
意を決して対処法を探しました。
調査
問題となってるUVを削除したいのだけれども、そもそもUVは削除できるのか?
これでいけないだろうか・・・?
cmds.polyMapDel("hogeGeo.map[4]", ch =False)
# Error: RuntimeError: file <maya console> line 1: Current selection doesn't match required selection type.
だめかー
選択したフェースからテクスチャ座標(UV)を削除します。
って書いてありますし・・・
さて困りました。
何かしらUV情報を更新できる方法があれば
とりあえず複数ポイントあるのが鬱陶しいので、せめて1点にまとめられるかやってみます。
テスト
手動ではつかめないのでチェック用スクリプトを改修し、孤立してるUVのIDを取得しマージを実行してみます。
import maya.api.OpenMaya as om
def checkIsolateUV(target,uvSet):
mesh_dagPath = om.MGlobal.getSelectionListByName(target).getDagPath(0)
shape_Fn = om.MFnMesh(mesh_dagPath)
uvShellIds = shape_Fn.getUvShellsIds(uvSet)
shells = {}
for i, n in enumerate(uvShellIds[1]):
if n in shells:
shells[n].append(i)
else:
shells[n] = [i]
result = []
if -1 in list(shells.keys()):
for i in shells[-1]:
result.append(target + ".map["+str(i)+"]")
return result
cmds.select(checkIsolateUV("hogeGeo","map1"))
とりあえずつかめました。
この状態で mergeUVを実行してみます。
さて、1点になったかな・・・・
確認するために再度↑のスクリプトを実行してみます。
あれ?ゼロ?
考察してみると、
polyMergeUV が実行されたとこで、メッシュのUV情報がアップデートされ
これにより孤立したUVの情報が削除されたのではないでしょうか?
であれば、孤立したUVを指定しなくてもこれでいけたりして・・・・
cmds.polyMergeUV("hogeGeo.map[0]",ch =False)
はい、いけました。