LoginSignup
3
1

More than 1 year has passed since last update.

Mayaスクリプトの見分け方

Last updated at Posted at 2021-09-03

MelとPythonでMayaスクリプトは記述されていますが、
「Maya Pythonモジュール」をimportすることで多様な書き方になっています。

そこで「Maya Pythonモジュール」を判別するための記事として以下の記述例を用意しました。
注意:「maya.mel」のみスクリプトエディターの「MEL」タブ、他は「Python」タブにて使用する想定で記述しています。


maya.mel
string $selObjs[] = `ls -sl`;
for($selObj in $selObjs){
    print ($selObj + "\n");
}
maya.cmds
import maya.cmds as cmds
selObjs = cmds.ls(sl=1)
for selObj in selObjs:
    print selObj
import maya.cmds as mc
mc.sphere()

注:Autodesk公式で「cmds」と「mc」の表記が混ざっている。
好きなプレフィックスを使ってよい…とされているが、統一してほしいところ。

pymel(PyMEL for Maya)
import pymel.core as pm
for selObj in pm.selected():
    print selObj
maya.OpenMaya(Maya Python API 1.0)
import maya.OpenMaya as om
selObjs = om.MSelectionList()

注:1.0と2.0を見分けるために「om1」と書いたり、
API2.0のことを「om」と記述している場合があるので気を付けたい。

maya.api.OpenMaya(Maya Python API 2.0)
import maya.api.OpenMaya as om2
selObjs = om2.MSelectionList()

注:API2.0を単純に「om」と記述している場合がある。
他人がスクリプトを見ることを考えて「om2」と書く方が合理的に思える。

その他(Mayaでしか動かないAPIの一例)
# XGen Python API
import xgenm as xg
import xgenm.xgGlobal as xgg

#レンダリング設定 Python API
import maya.app.renderSetup.model.override as override
import maya.app.renderSetup.model.selector as selector
import maya.app.renderSetup.model.collection as collection
import maya.app.renderSetup.model.renderLayer as renderLayer
import maya.app.renderSetup.model.renderSetup as renderSetup


一般的なpythonでみかけるimport文
import sys
import time
import re
import math
from itertools import izip 

Mayaでpython3系が使えないので、itertoolsをimportする必要があった。Maya2022からPython3が使えるのでこの記述は不要かも…。



Mayaのヘルプにあるように、APIの記述では「C++」という言語も登場します。
melともpythonとも記法が違い、C, C#, Javaに似た記法のものです。

Maya の C++ と Python API の違い
Maya Python API は C++ Maya API の正確なコピーではありません。統合のため、Python のバインドには変更を加えています。

C++
#include "XXXX.h"

void XXXX{
    for (int i = 0; i < 3; i++)
    {
        printf(i);
    }
    return 0;
}



今回の記事には、各モジュールの特性や速度比較などは載せていません。
気になる方は以下を参考にしてみて下さい。

参考
AUTODESK MAYA2020 / MayaのPython
MayaPythonScriptを比較してみる
【Maya】Python,C++,C#で比較。スキンウエイトの取得と設定





補記
cmdsとapi2.0で速度比較して
「apiの方が700倍速い!」と示しているデータもある。
頂点処理など大量にかさむ場合、apiは必須。

また、いくら調べてもMELしか記述が見つからないことも結構あるので、
あまりこだわらずにMELもpythonも適宜使っていきたい。

3
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1