mayaがwarningを吐いて鬱陶しい時
メッシュデータをimportしただけでこんなワーニングを吐く時
Warning: The mesh object|objectShape contains invalid or unused components. These can be cleaned up using the Mesh Cleanup dialog. #
場合にもよるけれども、指示通りにcleanup実行してもwarnigが出続ける場合がある。
そのケースの1つとして、不正なUVsetの存在(勝手に命名)があげられる。
不正なUVsetとは
UVsetNameは定義されていない(None)だが、UV座標情報がアトリビュートに残ってしまっているUVset
UVsetEditorからはもちろん見えないので、確認するにはnodeEditorかスクリプトで処理する必要がある。
まずUVsetNameを確認
import maya.cmds as cmds
uvSet_index = cmds.getAttr(node + ".uvSet", mi =True)
for index in uvSet_index :
uvSetName = cmds.getAttr(node + ".uvSet["+str(index)+"].uvSetName")
uvSetName が Noneでなければ、UVsetEditorに乗るので Noneじゃない場合はスルー
import maya.cmds as cmds
uvSet_index = cmds.getAttr(node + ".uvSet", mi =True)
for index in uv_index:
uvSetName = cmds.getAttr(node + ".uvSet["+str(index)+"].uvSetName")
if uvSetName != None:
continue
次にUVSetPoints(UV座標情報)がNoneか否かを判別
名前があって、UVセットが空の場合はそれはそれでワーニング出るので問題。
import maya.cmds as cmds
uvSet_index = cmds.getAttr(node + ".uvSet", mi =True)
for index in uvSet_index:
uvSetName = cmds.getAttr(node + ".uvSet["+str(index)+"].uvSetName")
uvsetPoint_index = cmds.getAttr(node + ".uvSet["+str(index)+"].uvSetPoints",mi =True)
if uvSetName != None and uvsetPoint_index != None:
continue
elif uvSetName != None and uvsetPoint_index == None:
print(node + " " + uvSetName + " is empty uvset")
continue
elif uvSetName == None and uvsetPoint_index == None:
print(node + " has invalid uvset")
continue
これで検知はできたとして、不正UVsetの除去方法を考える。
手っ取り早いのは、一度名前を与えて正規のUVset化した上で削除する
import maya.cmds as cmds
uvSet_index = cmds.getAttr(node + ".uvSet", mi =True)
for index in uvSet_index:
name = cmds.getAttr(node + ".uvSet["+str(index)+"].uvSetName")
uvsetPoint_index = cmds.getAttr(node + ".uvSet["+str(index)+"].uvSetPoints",mi =True)
if name == None and uvsetPoint_index != None:
cmds.setAttr(node + ".uvSet["+str(index)+"].uvSetName", "uvSet"+str(index) + "_reborn", type = "string")
cmds.polyUVSet(node ,uvSet = "uvSet"+str(index) +"_reborn",delete=True)