Mayaでの基本的なチェックスクリプト10選を作ってみました。
シーンをお掃除するのはプロのお仕事の中でも最も重要といってもいいくらいな作業です。
この作業を効率よくするためにもPythonでスクリプトを作るというのは必要不可欠な作業です。
これを機に、Python苦手な方も自身の作ったシーンを開きチェックを始めてみましょう!
チェック項目10選!
同名ノードのチェック
from maya import cmds
error_nodes = []
node_name = "root"
nodes = cmds.ls(node_name, dag=True, type="transform")
for node in nodes:
if 1 < len(node.split("|")):
error_nodes.append(node)
cmds.select(error_nodes)
トランスフォーム値0,0,1
from maya import cmds
TOLERANCE=0.000001 #何桁
def check_equal(v, t):
if v < (t+TOLERANCE) and v > (t-TOLERANCE):
return True
return False
def check_equal3(v, t):
if check_equal(v[0], t) and check_equal(v[1], t) and check_equal(v[2], t):
return True
return False
error_nodes = []
node_name = "root"
nodes = cmds.ls(node_name, dag=True, type="transform")
for node in nodes:
translate = cmds.getAttr("{}.translate".format(node))[0]
if not check_equal3(translate, 0.0):
error_nodes.append(node)
continue
rotate = cmds.getAttr("{}.rotate".format(node))[0]
if not check_equal3(rotate, 0.0):
error_nodes.append(node)
continue
scale = cmds.getAttr("{}.scale".format(node))[0]
if not check_equal3(scale, 1.0):
error_nodes.append(node)
continue
cmds.select(error_nodes)
ノードの非表示チェック
from maya import cmds
error_nodes = []
node_name = "root"
transforms = cmds.ls(node_name, dag=True, type="transform")
for transform in transforms:
val = cmds.getAttr("{}.visibility".format(transform))
if val == False:
error_nodes.append(transform)
cmds.select(error_nodes)
カラーセットの数
from maya import cmds
error_nodes = []
node_name = "root"
meshes = cmds.ls(node_name, dag=True, type="mesh")
for mesh in meshes:
uvsets = cmds.polyColorSet(mesh, query=True, allColorSets=True)
if 1 < len(uvsets):
error_nodes.append(mesh)
cmds.select(error_nodes)
UVセットの数
from maya import cmds
error_nodes = []
node_name = "root"
meshes = cmds.ls(node_name, dag=True, type="mesh")
for mesh in meshes:
uvsets = cmds.polyUVSet(mesh, query=True, allUVSets=True)
if 1 < len(uvsets):
error_nodes.append(mesh)
cmds.select(error_nodes)
ディスプレイレイヤーのチェック
from maya import cmds
layers = cmds.ls(type="displayLayer")
if u"defaultLayer" in layers:
layers.remove(u"defaultLayer")
cmds.select(layers)
テクスチャサイズチェック、フォーマット、2のべき乗
from maya import cmds
textures = cmds.ls(textures=True)
for texture in textures:
path = cmds.getAttr("{}.fileTextureName".format(texture))
ext = os.path.splitext(path)[-1]
width = int(cmds.getAttr("{}.osx".format(texture)))
height = int(cmds.getAttr("{}.osy".format(texture)))
ispow2 = (width & (width-1) == 0) and (height & (height-1) == 0)
print(path, ext, width, height, ispow2)
ヒストリーチェック
from maya import cmds
error_nodes = []
node_name = "root"
transforms = cmds.ls(node_name, dag=True, type="transform")
for transform in transforms:
histories = cmds.listHistory(transform, il=2, pdo=True)
if histories is not None:
error_nodes.append(transform)
cmds.select(error_nodes)
ピボットのチェック
from maya import cmds
error_nodes = []
node_name = "root"
transforms = cmds.ls(node_name, dag=True, type="transform")
for transform in transforms:
rp = cmds.getAttr("{}.rotatePivot".format(transform))[0]
sp = cmds.getAttr("{}.scalePivot".format(transform))[0]
if not (check_equal3(rp, 0.0) and check_equal3(sp, 0.0)):
error_nodes.append(transform)
cmds.select(error_nodes)
ネームスペースの存在
from maya import cmds
namespaces = cmds.namespaceInfo(listOnlyNamespaces=True)
namespaces.remove(u"UI")
namespaces.remove(u"shared")
if 0 < len(namespaces):
for namespace in namespaces:
print(namespace)
おすすめ書籍
このようなチェック関連のスクリプトはプロの現場ではかなり使います。
アーティストも使えるようになっておけば人材として重宝されること間違いなしです!
このような現場で使えそうなスクリプトは以下の書籍が参考になりますよ。
Python初心者向けの本ではありませんが、現場ではどのようなスクリプトが求められるかの参考にもなると思います。
コメント