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

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初心者向けの本ではありませんが、現場ではどのようなスクリプトが求められるかの参考にもなると思います。

関連記事

  1. アーティストのためのMaya Python入門 第7回「connectAttrコマンドを使って、ノード同士を接続しよう!」

    2020-10-03

  2. レイキャストを使った目線リグの作り方

    2021-12-18

  3. Maya C++ 入門③ | 単純なコマンドプラグインを作成しよう!

    2022-08-02

  4. Blend Shapeが壊れる?Transfer Vertex Orderで解決だ!

    2021-09-13

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

コメント

ABOUT

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

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

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

限定情報会員

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


免責事項

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

3DCGBOOK出版

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







スポンサー

ページ上部へ戻る