memo maya

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

Keita Imatomi
2021-4-17 03: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()

VSCode と繋ぐ

調査中。ちょっとうまくいかない。

こちらもどうぞ