|
Maya 開発環境の悩み事 それではまず、 Maya の開発環境を管理運営していて、直面しているであろう悩み事から 求める Maya のワークグループについて考えていきたいと思います。思いあたるところありますでしょうか。 ■複数のプラットフォームで Maya を動かしている これは、 Maya が Windows64bit / Windows32bit / Mac / Linux で動いているわけですから、 それぞれに対応が必要になるということになります。 ■複数のプロジェクト用ツールを同時作成している 大きな会社さんではツールを専門に作っている部署が、会社全体用の共通ツールの配信とプロジェクト単位で配信しているツールを 同時に提供する場合もあるだろうし、小さなチーム単位でツールを作っている場合でも、グループ間で共通ツールや各個人専用ツールの 管理配信を同時にしているかも知れません。 またはその混合で、会社全体の専門チームツールと各個別ローカルツールも、更にアウトソーシング用ツールもあるかも知れませんね。 ■異なる Maya のバージョン用のツールがある 上記とも関連しますが、同時に動いているプロジェクトが異なる Maya バージョンをベースにしている など考えられます。 ■PYTHONPATH の設定問題を簡単に解決したい PCの環境設定に PYTHONPATH が設置してある場合、 Maya.env に記述した PYTHONPATH は無視される、 という大きな問題を解決する最も簡単な方法はなんなのか、と悩んでいたりします。 非常に長いMelプログラムや Python からの Path 追加設定やバッチファイルで Maya を起動する、などが例としてありますが・・。 (誰が見ても解りやすく、簡単に設定・修正出来る共通ルールに基づいた設定が欲しいということです) ![]() では早速その答えになりそうな 最新 Maya ワークグループ設定の仕組みをご紹介していこうと思います。 |
MAYA_MODULE_PATH について 最新 Maya ワークグループ設定では、 MAYA_MODULE_PATH という Maya の環境変数を使います。 ドキュメントでは、次のような記述があります。 ■MAYA_MODULE_PATH (日本語ドキュメント) http://help.autodesk.com/view/MAYAUL/2015/JPN/?guid=Environment_Variables_File_path_variables Maya モジュール ファイルへの検索パスを定義します。 モジュールファイルには、モジュールとして配布されているプラグインのインストール場所が記述されています。 Maya ではこのインストール場所のサブディレクトリを、パス変数である MAYA_PLUG_IN_PATH、MAYA_PRESET_PATH、MAYA_SCRIPT_PATH、PYTHONPATH、および XBMLANGPATH に付加します。 という記述はあるのですが、具体的な運用例、詳細な説明は記載されていません。 もう少し追求してみましょう。 MAYA_MODULE_PATH は MayaV6.0(2003)以前からある古い環境変数(Environment Variables)です。 配布型のプラグインなどを Maya に認識させる変数として使用されてきました。 しかし、実は、この変数は Maya2013 において、すっごい変化が起こっているのです。 その新しく機能が追加された MAYA_MODULE_PATH について、改めて出来る事を解説していきます。 ■MODULE設定が出来る事 ●一括で \scripts \plug-ins \icons \presets のパスを設定する これは、ドキュメント通りです。例えば、 Maya.env に以下のように書いていた部分が、もっと簡単に設定出来ます。
●複数の設定が可能 MODULE設定 は、幾つでも設定出来ます。 会社やプロジェクト全体で使うツール群と各人の個別ツール群などを一緒に設定できます。 また、 userSetup.py (Mel)は Maya が起動時に検索した最初のファイルしか認識しないのですが、 そのことも踏まえてうまく活用出来ます。 ●設定ファイルは共有ディレクトリー/パスに置いて管理できる MODULE設定の書かれたファイルは単なるテキストファイルです。 このファイルを配布ツール用のサーバとは別の共有ディレクトリーに置くことで、 ツール管理者同士は書き込み修正できるように設定出来ます。 もちろん一般のユーザーには MODULE設定ファイルを操作して欲しくなければ、 書き込み権限を設定すれば良いだけです。 ●Mayaのバージョン、OS(Bit)、言語毎にパスを設定できる MODULE設定に書いておけば、 Maya を起動した時点で、 Maya のバージョン、 Maya を起動したパソコンのOSの種類、Mayaの言語 毎に環境変数や参照パスやを再設定できます。 Mayaの言語は、英語/日本語/簡体字中国語を認識し、 例えば同じツール群なのに、説明文だけ各国に応じた文章になる等が実現できます。(もちろんツールの中身も変えられますが) ●ツール群の配布/受け取りを楽にする ツール群がまるまる入ったディレクトリー構造を1つの圧縮ファイルにして配布/受け取りを行い、 あとは MODULE設定 ファイルの設置とMaya.env /userSetup.py (Mel)に多少の設定を記述すれば インストールは完了です。 アウトソーシングする先にツール環境を提供する場合も、外部から依頼で先方と同じ環境を構築する場合でも、 ぐ~んと楽になるはずです。 同じような事を述べるのですが、視点を変えて、 今度は開発環境について総合的な判断をする方(例えばテクニカル・ディレクター)への説明として、 MODULE設定についての利点を述べる、というかたちで以下に再度まとめてみました。 ■MODULE設定の利点 >> TDへの説明? ●MODULE用の設定ファイルの内容は解りやすい >> 管理しやすい
■MODULE設定が出来ない事 ●Mayaが見に行く場所を追加しているに過ぎない
|
Mayaワークグループ設定;相関図 MODULE設定ファイルを使用したワークグループ設定で、各ファイルの保存場所とその役割についての相関図です。 Maya が起動する時に認識していく順番が①→②→③→④です。 ![]() 具体的に言えば、Maya2015 で Windows7 64Bit の場合 C:\Users\ritaro\Documents\maya\2015-x64 内です。 ここでは Maya が最初に見つけた実行ファイル userSetup.py が、 ユーザーのディレクトリーのスクリプトの Path が通っている \2015-x64\ja_JP\prefs\scripts 内にあります。 (PCの環境変数に MAYA_APP_DIR が設定されていればそのディレクトリーバージョンの下の\ja_JP\ prefs\scripts 内)
具体的に言えば、Maya2015 の Windows7 64Bit でフォルトのユーザーのディレクトリーのスクリプトの通っている場所というのは、C:\Users\ritaro(ユーザー名)\Documents\maya\2015-x64\ja_JP\prefs\scripts 内です。
それでは、各番号毎①→②→③→④に設定ファイルの中身を解説していきます。 ①解説 Maya.env >> 相関図参照 PCのシステムの環境変数としてMAYA_WORKGROUP1 ,変数値 W:\Mayaというのが設定されている例です。
注目して欲しいのは、設定しているMAYA_MODULE_PATHは、ファイル名ではなく、ディレクトリー名である点です。 つまり、ここに複数のMODULE設定用のファイルを置くことが可能です。 もし、プロジェクト毎に設定する MODULE設定 を分けたい場合は、このディレクトリー名 を変更するしかないです。 ただ、そのディレクトリーの中には、幾つか他と同じファイルが置いてあってもかまわない、とは言えます。 そしてGTMF発表時には書いてなかったのですが、MAYA_SHELF_PATHが書いてあります。 シェリフだけはどうしても Maya.env に書いてあった方が都合が良いようです。 また、最初の行に書いてあった方が良いようです。複数の設定が既に書いてある場合でも、最初の行に記述してください。
シェリフを編集して保存しようとした場合、ワークグループのシェリフも保存対象になります。 もし、シェリフ に関して起動時や起動後に何らかのエラーが表示されていたら、 それはユーザー設定ファイルの記述に同名の シェリフ が複数登録されている、なんて現象かも知れません。 <編集は慎重に!!> ユーザーのディレクトリーの prefs の下に userPrefs.mel というファイルがあり、shelfFile で検索をかけると 1906行目あたりに -sv "shelfFile1" "shelf_General" なんて番号と名前が登録されています。 ここに同じ名前が違う番号にも登録されていたら、大きい方の番号の行を削除してあげると直ることがあります。 ②解説 Pro1_Toolset.mod >> 相関図 参照 PCのシステムの環境変数としてMAYA_WORKGROUP1 ,変数値 W:\Mayaというのが設定されている例です。
おまたせしました!! MODULE設定用のファイル Pro1_Toolset.mod の中身です。 1つのファイルに幾つもの分岐条件を記述することが出来ます。 上記例では、同じモジュール名(例:Maya_toolset)が Mayaのバージョン毎に見に行くディレクトリーが変えてあるものになります。 実はもっと多くの条件で見に行く場所を変えることができます。 では、さっそく、その解説です。
たった1行だけで、色々と面白い条件を設定出来ます。
面白いのは最初の + と - だけで有効/無効になることです。 何かツールサーバーのセットアップ中に、メンテナンスや修正が必要で今はユーザーにアクセスして欲しくない時、 ここを - にしておけばロードされません。 ローカル言語は、例えばUIが他の言語になるディレクトリーを見に行かせる という設定が出来ます。 続いてそれ以下の行の説明です。
この中で重要な1つは、PYTHONSTARTUPの行で、青矢印③→④ へとつながる流れを設定している部分です。 Modules設定ファイル は Module内から 環境変数の設定をしている、と うすうす解って来ていると思います 。 Maya.env でも当然環境変数の設定をしています。 では、何が違うのでしょうか。 例えば既存のパスにこのワークグループ・ツール群内の /bin というディレクトリーを追加したい場合、 Maya.env では、以下のように書くと思いますが、
Modules設定ファイルの場合は 以下のように書きます。
で、Modules設定ファイルの方がはるかに便利だ(柔軟だ)と気が付くでしょう。 =という記号が付いてる各行には、その前にも記号が付いていたりします。 この記号がとても大切な意味 を持っています。
一番良く使うのは下の2つです。 := は、モジュール内のディレクトリーをその指定した環境変数にするという意味です。 例えば、 ANIMTOOL_PLUGIN という環境変数は MAYA_WORKGROUP1 の2015-x64\plug-ins ということで、 もっと具体的に言えば MAYA_WORKGROUP1 はW:\Maya と CP環境変数で設定していたので、 ANIMTOOL_PLUGIN はW:\Maya\2015-x64\plug-ins というディレクトリーだ、と単一変数の設定をした事になります。 +:= は、おまちかね、 PYTHONPATH の行に書かれていますね。 既存の PYTHONPATH に モジュール内のディレクトリーを追加しなさいという意味になります。 もっと具体的に言えば W:\Maya\2015-x64\pythonというディレクトリーを既存のPYTHONPATH に追加した事になります。 なんと簡単で便利なことでしょうか!! たった3文字 +:= で、 PYTHONPATH 問題を解決してしまいました。
最後に1行残っています。今はコメントアウトしてありますが、# を外せば有効になります。
※良い参考ファイルは・・ 上記のような事が解ったような気分で、改めて インストール済みの メンタルレイ用 .mod設定ファイルを見ると、 MODULE設定の非常に良いサンプルになっていると気が付きます。ローカル言語分けも設定されています。 C:\Program Files\Common Files\AutodeskShared\Modules\Maya\2015\mentalray.mod です。(Maya2015版) ③解説 userSetup.py >> 相関図参照 Maya が最初に見つけた実行ファイル userSetup.py が、 ユーザーのディレクトリーのスクリプトのPathが通っている \2015-x64\ja_JP\prefs\scripts 内にあります。 Modules設定を付け加える為、以下のように記述されています。
ここまで来て、ようやく Maya が実行するもの の説明になります。 userSetup.py にはユーザーさんが 既に何かを設定している場合もあるでしょう。 その使い勝手を ツール管理者 が奪ってはいけません。 何故なら、Maya は最初に発見した userSetup.py ファイル1つしか起動時に実行しないからです。貴重なんです。 そこで、下の3行だけ、追記のお邪魔をさせてもらいます。 ここでは、② 解説Pro1_Toolset.modで環境変数を設定した PYTHONSTARTUP に実行ファイルがあったら、それを実行しろ と書いてあります。 PYTHONSTARTUP の場所は Module設定ファイル Pro1_Toolset.mod で MayaのバージョンやOSやローカル言語毎に異なる場所が設定されます。 つまり、たった3行追記されるだけで、この実行ファイルは条件分岐先のものを実行します。 例として、Maya2015 を起動した場合、 PYTHONSTARTUP は、 W:\Maya\2015-64\Project01_MAYA2015_Startup.py と設定されます。 ④解説 Project01_MAYA2015_Startup.py >> 相関図参照 ここで始めて用意しているツール群を準備設定をする実行ファイルが実行されます。 Project01_MAYA2015_Startup.py は、Mayaのバージョン毎の \python ディレクトリーにあります。( __init__.py も忘れずに ^_^;;) ![]()
最初の4つのプリント文はMayaが起動した時に最初に表示される白いウィンドー Output Window に表示されるものです。 (Mayaを起動した時、設定した正しい起動ファイルが読み込まれたのか確認することが出来ます。とても大事・・・) ここで解る事は、Mayaのメイン画面が表示される はるか以前に、最速で実行されている、という事です。 つまり、次に解説する事なのですが、Mayaのメイン画面やGUIに関わるような機能をこの段階で用意しようとして実行しても、 まだMayaのメイン画面すらが整っていない段階なので、 ランタイムのエラーとなってこの Output Window に表示されてしまいます。 ![]()
このWebページを作成する段階では、シェリフのプラグインの使用をやめていますが。 この ツール群にある plug-ins というディレクトリー内にある*.pyというプラグインファイルは自動的にロードしろっていう設定になります。便利です。 ANIMTOOL_PLUGIN は、Pro1_Toolset.mod で設定しています。
ここでの最大の注目のコマンドは executeDeferred です。 (ドキュメント maya.utils項目参照 http://help.autodesk.com/view/MAYAUL/2015/JPN/?guid=GUID-9B5AECBB-B212-4C92-959A-22599760E91A) executeDeferred = Mayaが起動で忙しいと実行しない!! です。 つまり、Mayaがメイン画面の設定をし終わった後に、メニューやFPSの設定等を実行しなさい、という実行延滞機能を実現します。 上記行は、具体的には W:\Maya\2015-x64\python\menu\Pro1_MainMenu.py 内の def ST_Pro1_MainMenu(): を Mayaが起動し終わったら実行しなさい、 ということで、メインメニュー画面からのプルダウンメニューを設定してる スクリプト・ファイル を示しています。 このプルダウンメニューを設定しているスクリプトは後で詳しく記述しています。
ここも executeDeferred で実行しています。 これは、Mayaを起動した時の FPS と 下の再生範囲を 1~100 に設定しています。 今は 30FPS に設定されていますが、下の行と入れ違いでコメントアウトすることで 60FPS になります。 また、起動した時のフレーム値は 1 に設定しています。
ここまで記述しておきながら、じゃ~、実際の画面はどうなっているのか、と聞かれそうなので、 次は実際の画面とスクリプトの中身を公開していきます。 |
Module設定で配信したツール環境例;Python 上記のような Module設定 で用意したツールは、Maya上では実際どのようなものかの例です。 (MelのGUIはユーザー様が記述したものを参考にメインメニューからの起動例として、使わせて頂きました。よろしくお願いいたします。) 以下の図に紹介しているツール群は、ツール用のサーバーから起動時に読み込まれて Maya に組み込まれているものです。 シェリフ と そのアイコン と その内部のツール、Mainメニューからティアオフ出来るプルダウンメニューとそこから起動した各種GUIです。 GUIも色々な種類があり、 Mel の GUI、 Python の GUI、 QT Designer で作成した GUI もたくさんの種類があります。 単独の GUI/メイン画面にドッキング出来る GUI/用意したウィンド内で複数ドッキングできる GUI など様々あります。 そして、既存グラフエディタ・パネルにPythonでカスタムなGUIをくっ付けた オリジナルなグラフエディタ などもあります。 これらは全てまとまった階層構造以下にある訳ですから、圧縮して1つのファイルにしてしまえば、いっぺんに配信することも出来ます。 以下のページでは、 QT Designer で作成した GridControl というツールを GUIの例として ソース付きで解説しています。 では、まず始めに、便利なメインメニューからのプルダウンメニューの紹介からです。 このプルダウンメニュー用の Pythonファイル Pro1_MainMenu.py は Project01_MAYA2015_Startup.py によってMaya起動時に実行されるように設定されています。 ツールサーバー用の階層構造内の python ディレクトリーは PYTHONPATH が通っているディレクトリーで、 そのサブディレクトリー menu 内にファイルが置いてあります。 具体的には W:\Maya\2015-x64\python\menu 内に Pro1_MainMenu.py が置いてあります。 ![]()
表示されるメニューはこんな感じで、点線の部分でそれぞれティアオフします。 ![]() 各行を見れば、割と簡単な記述ですね。 Mel と Python で出来たGUIは、その起動すべき関数さえ指定してあげれば起動します。 Mel の GUIの場合は Pythonから Mel を動かすので、 mel.eval("source MELGUITest;MELGUITest;")')という記述でOKです。 メニューのフォントを太くする boldFont=True なんて記述もありますね。 あとは qt で作成したGUIは少し書き方がことなるので、少し QT Designer の紹介と共にご記述したいと思います。 |
QT Designer ;Python![]() どこにあるかと言えば、 Maya 2015 では、
ただし、 Maya 側のコマンドが全てのメニューに対応していないのと、思い通りにはならない場合もあるので、万能ではありません。 Maya 対応リストは、以下スクリプトを実行すると表示されます。
使用可能なウェジットタイプとそれに関連付けられたMayaコマンド表
★ 作成出来るフォーム、3つ QT Designer で作成できるフォームは3種類あります。
QT Designer の上のメインメニューで左から7番目のボタンを押すと、このシグナルとスロットの設定画面になります。 ![]() ただし、やはり思惑通りには関連が付けられないこともあって、うーんって悩みどころ多数です、 上図例では、一旦ジョグダイアルと下にあるスピンボックスとを関連付けてからテキストボックスと関連付けています。 ★ ダイナミックプロパティー Mayaコマンドとリンクさせる仕組みを作ります。 +command、+dragCommand は Python 用で、 -command、-dragCommand が Mel 用です。 ![]() スライダーをスクラブするとグリッドの大きさが変化します。 このMaya用のコマンドを書き込む欄が1行しかなくて狭いので、 通常は外部に .py ファイルにコマンド内容を書いて置き、そこを見にいくように記述します。 この例では、qtmenu というディレクトリーに GridControl1.py というファイルがあり、その中の変数を見にいくように記述されています。 そのGridControl1.pyの中身は以下の通りです。
つまり、QT Designer で作成した GUI のファイル GridControl.uiとそのプログラム GridControl1.py はセットで用意します。 ![]() qt_GridControl.py には次のように記述されています。
ここでの注目は、 loadUI コマンドを使用して GridControl.ui を Maya にロードしている点です。 ■ loadUI http://help.autodesk.com/cloudhelp/2015/JPN/Maya-Tech-Docs/CommandsPython/loadUI.html あ、QTMENU という 環境変数が出て来てますが、もうお分かりですよね、 Module設定ファイル Pro1_Toolset.mod で設定している場所です。 具体的には W:\Maya\2015-x64\python\qtmenuということです。そこにGridControl.uiが置いてあります。 そして、同じ GridControl.ui ファイルを利用して Mayaのメイン画面にドッキング可能な GUIとしてロードすることも出来ます。 例えば、別ファイル qt_GridControl_dock.py に以下のように記述します。
ここでの注目は、showWindow コマンドをコメントアウトして、 dockControl コマンドを最後に設定している点です。 この dockControl コマンドでは、どのような初期状態で表示するかを記述しておきます。 ■ dockControl http://help.autodesk.com/cloudhelp/2015/JPN/Maya-Tech-Docs/CommandsPython/dockControl.html でもね、苦労してドッキングメニューを作成しても、メニューウィンドを移動させるとドッキングしようとするので、うざい!! って評判は今一です。 普通に表示するメニューの方がよろしいようで・・?~_~;; |
あとがき という内容が、 GTMF2014 の後半20分で説明した、ワークグループ設定について、でした。 え、20分でやるには膨大すぎるって、まーTA向けのをフルでやりたい気持ちがあったのですが・・。 最初は理解に時間を要するかも知れませんが、一旦動き出せば便利な方法だなと理解してもらえると思います。 誰かが作った Module設定ツール群をもらったとしたら、たった5分でセットアップは完了です。 ぜひチャレンジしてみてください。 では、最後に、 QT Designer で作成した フローティング・ウィンドに4つのドッキングメニューを統合した GUI画像をお見せして終わりにしたいと思います。 Webページも閲覧出来ますし、タイムスライダー、シーンのロードとネームスペースの取得、キャラクターの骨選択ツールにもなっています。 |
という訳で、次回はまたきっと Mayaでしょう。 What's Next ... 乞う、ご期待!! Stay tuned ..
|