基本的なシーンをチェックするスクリプト10選!

Mayaでの基本的なチェックスクリプト10選を作ってみました。
シーンをお掃除するのはプロのお仕事の中でも最も重要といってもいいくらいな作業です。

この作業を効率よくするためにもPythonでスクリプトを作るというのは必要不可欠な作業です。
これを機に、Python苦手な方も自身の作ったシーンを開きチェックを始めてみましょう!

同名ノードのチェック

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)

関連記事

  1. やってみよう!Pose Space Deformation(PSD)

    2021-07-17

  2. アーティストのためのMaya Python入門 第16回「ノードを知ろう!ノードを知れば、隠しアトリビュートの値が取れる!」

    2020-11-10

  3. 回転を曲げ・捻りに分解するメリットと方法の解説

    2021-10-11

  4. リガーに必須の講演資料や書籍4選!

    2020-12-23

コメントをお待ちしています。

コメント

ABOUT

テクニカルアーティストの為のまとめサイトです。

本サイトでは、『YouTube ✕ Blog』を中心に
情報発信をしていきます。

また、テクニカルアーティストとしての様々な
ライフハック記事も投稿予定です。

限定情報会員

PATREONでは、限定情報やサンプルファイルの配布も行っています。登録頂けると更新頑張れます。支援の方よろしくお願いします。


免責事項

本ウェブサイト内で公開している全ての情報の有用性や安全性については当方は一切の保証を与えるものではありません。
利用したことによって引き起こる直接および間接的な損害に対して当方は一切責任を負うものではありません。
全て自己責任でご使用ください。

3DCGBOOK出版

BOOTHで技術書を販売利しております。







スポンサー

ページ上部へ戻る