Maya での Python 事始め。とりあえずおさえておくところ

imatomix
2021年4月17日 3:15
久しぶりにMayaを使っているので、スクリプトでも書いてみました。

MEL から Python へ

かなり昔 Maya のスクリプトを書いてた頃は MEL しかなかったけど、今は Python で書けるようになっててうれしい。 Python は昔 flask でweb 作ったとき、コードが見やすい印象があり割と気に入ってる。なので今後はMELじゃなくて Python で書いていこうと思ったら、 PyMel というのもあるらしい。

Python

ひとまず、Python。そのあとPyMel。

maya.cmds

maya のコマンド がバインドされてるモジュール。
試しに hello 出す UI 作ってみる。
hello.py
from maya import cmds def printHello(*args): print "Hello! Maya & Python!" cmds.window(title='Hello Button', widthHeight=(300,100)) cmds.columnLayout(adjustableColumn=True) cmds.button(label='Hello', command=printHello); cmds.setParent('..') cmds.showWindow()

maya.mel

Pythonの中でMELコマンドを実行するモジュール。 evalevalDeferred の各 Maya コマンドは Python ではサポートされていないらしいので、そういう時に使うのかな。
from maya import mel maya_location = mel.eval("getenv MAYA_LOCATION") print(maya_location)

maya.utils

詳しくは調べてないけど、スレッド関連。 必要になったら調べる。

PyMel

オープンソースの Python ライブラリで、修正 BSD ライセンス。Autodeskは直接のサポートは行っていないけど、Maya と一緒にインストールされているらしい。 PyMELのほうがオブジェクト指向を生かしたPythonらしいスクリプトが作成できるらしい。

pymel.core

Python での maya.cmds をラップしたもの。
上の hello,py をpymel で書き直したらこう。ほぼかわらない。
hello.py
from pymel import core def printHello(*args): print "Hello! Maya & Python!" # .windows は省略しても動いた。 core.windows.window(title='Hello Button', widthHeight=(300,100)) core.windows.columnLayout(adjustableColumn=True) core.windows.button(label='Hello', command=printHello); core.windows.setParent('..') core.windows.showWindow()