ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

Mayaのスクリプト環境についてのメモ

MayaのスクリプトについてはMELを少し試したことがあるのみで、未だMayaのスクリプト環境についてよく分かってないため、今更ではありますが調べてまとめてみました。

 

そもそもスクリプトプラグインの違いって何?


スクリプト
Mayaのスクリプトエディタ等でその場で書いてその場で実行できるもの。
外部のスクリプトファイルを実行することもできる。
「MEL」「エクスプレッション」「maya.cmds」「PyMEL」「Dash」等がある。

プラグイン
Mayaの機能を拡張するためのもの。
外部ファイルをMayaのプラグインマネージャでプラグインを読み込んで使用する。
またはMELコマンド等のスクリプトで読み込んで実行する。

プラグインマネージャで管理されるプラグインは、Maya起動時やロードチェックボックスをONに切り替えた際に読み込まれる。

プラグインを格納する所定の場所は下記の2点。

C:¥Users¥<ユーザ名>¥Documents¥maya¥<バージョン>¥plug-ins

MAYA_PLUG_IN_PATH 環境変数で定義されているフォルダ
※ユーザ環境変数でパスを設定する
 もしくは「Maya.env」ファイルにパスを設定する
 複数のパスを指定できる


プラグインは公式ヘルプによると「コマンド・ノード・シェーダ・コンストレイント・ファイル トランスレータ・デフォーマなどのカスタマイズ可能な要素を定義できる」「Maya の C++ API に基づく、複数の OpenMaya モジュールを使用する」とのこと。

C++で作成する他に、Maya8.5以降はPythonでも作成可能になったそうです。

ちなみに下記の記事よると「スタンドアロンのMayaアプリケーション」もPythonで作成できるのですね。「Maya本体を起動することなくMayaの機能を使った独立したアプリケーションを作成できる」とあります。
http://www.not-enough.org/abe/manual/maya-python/introduction-python.html

 

Mayaで扱えるスクリプトの種類


MEL

Mayaのメインのスクリプト言語。MayaのUIは主にMELで作成されている。
MayaのGUIから実行できることは全てMELで実行できる。

3種類のコマンドがある。
・ランタイムコマンド
・MEL プロシージャ
・Maya MELコマンド

Maya2019 公式ヘルプ:Maya の Python MEL コマンド

maya.cmdsPython
MELコマンドのPythonラッパーで、MayaのほとんどのMELコマンドが使える。
使用する際は「import maya.cmds」を先頭に記述。
「import maya.cmds as cmd」にすれば「cmd.<Mayaコマンド>」の短い記述で呼び出せる。

Maya2019 に含まれるのは‥
Python 2.7
・Maya Qt 5.6.1
・PySide 2.0

Maya2019 公式ヘルプ:PyMEL の使用法 Python コマンド

pymel.corelPython
PyMEL。
オープンソースPythonライブラリ(修正BSDライセンス)。
PyMELはMayaと一緒にインストールされるがAutodeskは直接のサポートは行っていない。
使用する際は「import pymel.core as pm」を記述。

Maya2019 公式ヘルプ:PyMEL リファレンス(英語)

maya.OpenMaya(Python
Maya C++ APIPythonラッパーで「Python API 1.0」と呼ばれるもの。
プラグインの開発、MELで公開されていない機能を必要とする処理が可能。

maya.api.OpenMaya(Python
Maya C++ APIPythonラッパーで「Python API 2.0」と呼ばれるもの。
Python API 1.0よりパフォーマンスが良くてよりPythonらしいAPIとのこと。
まだ開発中でPython API 1.0の全てのクラスは使用できないそうな(2019年5月時点)。

Dash
チャンネルボックスに入力できるコマンドのようです。便利そう。
Maya 2018: Dash Scripting - YouTube

Maya2019の公式ヘルプによるとコマンドの種類は6つでシンプルな記述ですね。
とりあえずこういうものがあると知っておくと良さそうに思いました。

MayaのGUIの作成について


MayaのGUIMELQtで作成することができるようです。

●Maya2019 公式ヘルプ

・MELによるインターフェース作成のドキュメントはこちら
 インタフェースを作成する
 ウインドウ・コントロール・レイアウト・グループ・メニューなどで構成される

・Qtによるインターフェース作成のドキュメントはこちら
 インターフェースのルック&フィールをカスタマイズする
 PySideuicワークフロー

Qt(キュート)とは?

Unix/LinuxWindowsMac OS XやモバイルOSなど複数のプラットフォームに対応したクロスプラットフォームアプリケーション開発フレームワーク
Java / Ruby / Python / Perl / C# などの多くの言語でバインディングされている。
UIの記述に特化した言語「QML」も利用できる。

商用ライセンスとオープンソースライセンス(LGPL)がある。

●QtのPythonバインディング

QtをPythonで利用できるようにしたもの(Pythonバインディング)にPyQt(パイキュート)やPySide(パイサイド)がある。

PyQt
 Pythonプラグインとして実装されている。
 商用ライセンスとオープンソースライセンス(GPL)がある。

PySide
 Pythonに付属しているTkinter(GUIライブラリ)の代わりとして用いられる。
 オープンソースライセンス(LGPL)。

●全てコーディングで作成しないとダメ?

Maya2019 公式ヘルプに「Qt DesignerでMayaのUIを作成できる」とあります。

QtによるGUI作成をグラフィカルな操作で行えるアプリケーションに「Qt Designer」や「Qt Creator(こちらは統合開発環境)」など複数の選択肢があるようです。

参考サイト:

 

Mayaプラグインの作成と読み込み


プラグインの作成

一度試しに作成してMayaに読み込んで実行してみると理解しやすそうです。

Pythonによるプラグイン作成の導入
 こちらで”Hello World”を表示するプラグイン作成の解説があります。
 http://www.not-enough.org/abe/manual/api-aa10/commandPlugin.html

C++によるプラグイン作成の導入
 Maya2016の公式ヘルプに「単純なプラグインを作成する」という項目があります。
 "Hello World"を表示するプラグイン作成が解説されています。
 また、デジタルフロンティアの「DF TALK」に解説記事があります。
 2008年の記事になるのでその点だけご注意。
 デジタル・フロンティア-Digital Frontier | DF TALK | はじめてC++で書くMayaプラグイン

プラグインの読み込み

記事冒頭でプラグインを格納する所定の場所2点について記載しましたが、デジタルフロンティアの「DF TALK」の記事では、システムのユーザー環境変数に書くのはおすすめできず「Maya.env」というファイルで定義するか、Maya起動バッチで定義するのが良いとのこと(システムの環境変数の方がMaya.envよりも優先されるようなので注意)。

デジタル・フロンティア-Digital Frontier | DF TALK | 知っていると便利かもしれないMayaの環境変数

・MAYA_PLUG_IN_PATH
 プラグインを検索する場所を格納する環境変数
 「plug-ins」フォルダを作成して設定する。

・MAYA_SCRIPT_PATH
 MELやPythonスクリプトを検索する場所を格納する環境変数
 「scripts」フォルダを作成して設定する。

・XBMLANGPATH
 アイコンを検索する場所を格納する環境変数
 「icons」フォルダを作成して設定する。

Maya2019 公式ヘルプ:プラグイン Mayaプラグインのインストール