MEL入門
始めに
MEL(Maya Embedded Language) とは Maya で使用できるスクリプト言語です。
MEL によって Maya の機能のコントロール、カスタマイズや拡張などを自由におこなうことができます。
たとえば、Maya の GUI はほとんど MEL によって作られていて、
ユーザーが使いやすいようにメニューを追加したり、レイアウトを変更することができます。
Maya では、 GUI のメニューから何かの機能にアクセスした場合も、
その裏でその機能に対応する MEL のコマンドが実行されています。
つまり Maya を操作するということは、 MEL を実行するということに等しいわけです。
そして Maya でできることの多くが、 MEL によってできるようになっています。
しかし、GUI からでも基本的なことは実行できるのに、さらに MEL スクリプト(MEL によるプログラム)を作れるようになると何が便利になるのでしょうか。
- 複数の操作を繰り返し実行しなければならない場合、それらを MEL コマンド 1 つでおこなえるようになります。
- GUI をカスタマイズして、自分の使いやすいインターフェースに改良することができます。
- GUI だけで作ることが難しい、大量のオブジェクトのモデリング・アニメーションができるようになります。
- 数式・プログラムによる複雑なモデリング・アニメーションができます。
- GUI のメニューには無い、独自の機能を追加することもできます。
- GUI を使わないでモデリング・レンダリングをすることもできます。
Mayaプログラミング で勉強すること
ここでは、主に Maya のモデリング・アニメーションなどを MELスクリプトを使用して行ない、MEL スクリプトの作り方を練習していきます。
- 基本的な MEL コマンドを覚えて、簡単なスクリプトを書くことができるようにします。
- スクリプトを作るために必要なプログラム要素である、変数・制御構造・プロシージャなどの文法や使い方を学習します。
- 独自の GUI (グラフィック・ユーザー・インターフェース)を作る練習をします。
- MEL の応用として様々なモデリング・アニメーションのスクリプト例を作ってみます。
- MEL でパーティクルなどのダイナミクスを制御するスクリプトを作り、ダイナミクスの実験をしてみます。
ここに掲載してあるサンプルプログラムは、あくまでも MEL を学習するためのものなので、
なるべくシンプルな形で作成されています。
実用的なプログラムにするためには、複数のプログラムを組み合わせたり、
エラー処理・ユーザーインターフェース(GUI)などを
追加しなければならないかもしれません。
ここには、そのために必要な最低限の知識が載っているはずなので、
余裕のある人はチャレンジしてみてください。
MEL の概略
MEL は、コマンドと呼ばれる命令によって構成されています。
コマンドの数は 1000 以上あり非常に種類が多いのですが、もちろん最初から全部覚える必要はありません。
最初は基本的なものから覚えてゆき、後はヘルプなどを参照しながら MEL スクリプト作ってゆけば良いのです。
MEL コマンドの種類は、以下の通りです。
- シーンコマンド
- シーンと、その環境を操作するために使われます。
最も種類が多いコマンドです。
- アドミニストレーションコマンド
- ファイル入出力、OSへのアクセスなど。
- ユーザーインターフェースコマンド
- GUI をつくります。
- 関数
- 配列、カーブ、数学関数、乱数、色変換など。
MEL の文法は、C 言語と UNIX のシェルスクリプトを組合せて、
少しだけ C++ 言語の文法を足したようなものになっています。
コマンドラインからの実行
MEL コマンドを実行するためには様々な方法がありますが、まずは簡単な方法からやってみましょう。
最初に、 Maya メインウインドウの左下にある、
コマンドラインにコマンドを入力する方法で MEL コマンドを実行してみます。
なお、以下において Enter キーはキーボードの右端にあるテンキーのものを使うと、いちいちフォーカスをコマンドラインにあわせる必要が無いので便利です。
- コマンドラインをマウスによってフォーカスし、カーソルが出ている状態にしてください。
- コマンドラインに
sphere
と打ち込んで最後に Enter キーを押してください。
- すると、半径1の NURBS の球体がシーンに現れます。
次に今作った球体を、MEL コマンドを使って移動してみましょう。
- コマンドラインに
move 3 0 0
と打ち込んで Enter キーを押してください。
- すると、球体が(3, 0, 0)の位置に移動します。
- 次に、コマンドラインから
move 0 0 3
と打ち込み Enter キーを押しましょう。
- 今度は、球体が(0, 0, 3)の位置に移動しました。
作られたオブジェクトを回転するには rotate コマンド、
拡大・縮小には scale コマンドを使います。
- コマンドラインから rotate 0 45 0 と打ち込み、Enter キーを押します。
- 球体がオブジェクト空間で Y 軸方向に 45 度回転したはずです。
- 次に、コマンドラインから scale 1 2 1 と打ち込んで、Enter キーを押します。
- 今度は、球体が Y 軸方向にスケールされます。
今、実行してきたコマンドは通常 GUI のメニューや、
チャンネルボックス・アトリビュートエディタなどで実行したり、
マニピュレータをマウスで操作することによって
数値の設定を行っていますが、MEL コマンドで同様なことが行なえるのがわかったと思います。
Tips
コマンドラインのフォーカスは、テンキーの Enter キーを使わないとはずれてしまいます。
普通の Enter キーでもフォーカスがはずれないようにするには、以下の設定を行います。
-
で プリファレンス ウインドウを表示します。
- インターフェース 中の コマンドライン の フォーカスの保持 にチェックを入れます。
練習
- 上のシーンにもう 1 つ NURBS の球体を作って、その球体も move によって適当な位置に移動し、 rotate,scale を使って回転・スケールを実行してみましょう。
自分の思ったとおりに移動・回転・スケールができたでしょうか。
- 球体以外のプリミティブも作ってみましょう。
球体以外のプリミティブには、たとえば
cone
nurbsCube
cylinder
polyTorus
などがあります。
これらのコマンドをいくつか実行して、たくさんのオブジェクトを作り、
move, rotate, scale を使って好きなように並べてみましょう。
もちろん、プリミティブの種類はこれだけではありません。
興味のある人はコマンド名を調べて実行してみましょう。
(ヒント)
次に説明するスクリプトエディタを使用すると、GUI から実行したコマンドを知ることができます。
スクリプトエディタによるコマンドの実行
MEL を実行するもう 1 つの方法として、スクリプトエディタ(Script Editor)があります。
MEL スクリプトを作成・実行するときには最も良く使われます。
スクリプトエディタ には、以下のような利点があります。
- 複数のコマンドをまとめて入力することができます。
- エラーがあれば、スクリプトエディタ のヒストリーウインドウに表示されます。
- GUI での操作によって、どのような MEL コマンドが実行されているかわかります。
実行された MEL コマンドは、ヒストリーウインドウに表示されます。
- テキストエディターで作成した MELスクリプトを、読み込んで実行することができます。
スクリプトエディタ におけるコマンドの実行例
- メインウインドウのメニューバーから によって
スクリプトエディター を表示します。
または、メインウインドウの右下にあるスクリプトエディタアイコン
をクリックすることによっても表示できます。
メニューの下のアイコン部分をツールバー、
2 つに分かれているウインドウの上のウインドウをヒストリウインドウ、
下のウインドウをインプットウインドウと呼びます。
- ヒストリウインドウ
- 実行された MEL コマンドと、その実行結果を表示します。
エラーがあった場合にはエラーの内容などが表示されます。
- インプットウインドウ
- 実行したい MEL コマンドを入力・編集するためのウインドウです。
左に表示されている 1 という数字はコマンドの行番号を表します。
- スクリプトエディターのインプットウインドウにコマンドを入力します。
ここでは sphere と入力してみてください。
- 入力したコマンドは、以下のいずれかの方法で実行します。
- スクリプトエディター上のメニューバーから で実行します。
- ツールボックスの
または
ボタンを押します。
- Ctrl + Enter キーを押します。
- フルキーボードの場合は、右端のテンキーにある Enter キーを押します。
実行すると、図のようにヒストリウインドウに表示されるはずです。
ヒストリウインドウの // 結果: の右に、
作られた球体のノード名 nurbsSphere1, makeNurbsSphere1 が表示されていることに注意してください。
このように MEL コマンドを実行すると
// 結果:
と
//
の間にコマンドが返してくる文字列・数値などが表示されます。
- 半径 1 の NURBS の球体がシーンに現れます。
スクリプトエディタの、メニューとツールバーについての解説は次回におこないます。
フラグ
多くの MEL コマンドでは、フラグを使うことができます。
フラグとは、MEL コマンドのデフォールトの動作を変更するためのものです。
たとえば、move コマンドには -r というフラグがあります。
このフラグを、move コマンドにつけて実行すると結果が変わります。
具体的な例を実行してみましょう。
- NURBS の球体を作成します。
コマンドラインか、スクリプトエディタに sphere コマンドを打ち込んで実行してください。
以下の MEL コマンドも同様に実行してください。
- move 2 0 0 を実行します。
- NURBS の球体は、現在 (2, 0, 0) の位置にあります。
- もう一度、move 2 0 0 を実行します。
- NURBS の球体は、以前と変わらず (2, 0, 0) の位置にあります。
なぜなら、move 2 0 0 という MEL コマンドが
デフォールトでは、(2, 0, 0) に位置に移動する命令だからです。
- つぎに、-r フラグをつけて
move -r 2 0 0 を実行してみます。
- NURBS の球体が、(4, 0, 0) の位置に移動します。
これは、-r フラグをつけることによって、
move コマンドが元いた位置から (2, 0, 0) だけ移動するという動作に変わるからです。
このように、フラグは - (ハイフン)に フラグ名 をつけたものを、
MEL コマンドの右に追加して使用します。
また、フラグ名には長い名前と短い名前があります。
上の例では、-r が短い名前のフラグ名で、
同じフラグの長い名前として -relative があります。
どちらを使っても動作は同じですが、
よく使うフラグは短い名前、
あまり使わないフラグはなるべく長い名前を使うとよいでしょう。
MEL コマンドにどのようなフラグがあるかは、
Maya のヘルプまたは、
MEL コマンドリファレンス
を参照してください。
Tips
スクリプトエディタ のインプットウインドウにコマンドを入力して実行する時に、
実行するコマンドをマウス左ボタンで選択しておくと、
実行した後もインプットウインドウにコマンドが残ったままになるので、
同じコマンドを連続して実行したい時に便利です。
また、コマンドを選択しないで、
ボタンによって実行してもコマンドがインプットウインドウに残ったままになります。
練習
- スクリプトエディターのインプットウインドウに、複数のコマンドを入力して実行させてみましょう
このとき、各コマンドの後ろに ; (セミコロン)をつけておいてください。
たとえば、インプットウインドウに
sphere;
move 5 0 0;
と打ち込み実行してみます。
NURBS の球体が作成されて(5, 0, 0) の位置へ移動したでしょうか。
続けて、様々なプリミティブを作るコマンドと、それらを移動・回転・スケールをかけるコマンドをインプットウインドウに打ち込んで実行してみましょう。
(注意)
複数のコマンドを入力する場合は、最後の行(上の例では move 5 0 0; )の後ろの ; は省略できます。
- GUI の操作によって スクリプトエディタ のヒストリウインドウにどんなコマンドが表示されるか確かめてみましょう。
たとえば、メインウインドウのメニューから
によって
球体を作ると、どんなコマンドが表示されますか?
その他のメニューもできるだけ実行してみてください。
シェルフへのコマンドの登録
スクリプトエディタ の ヒストリウインドウ・インプットウインドウ に表示されているコマンドは、
シェルフに登録しておいて後で実行することができます。
同じコマンドを、何度も実行する必要がある場合に便利です。
また、シェルフに登録しておいたコマンドを スクリプトエディタ にコピーすることも可能です。
シェルフへの登録例
スクリプトエディタ に表示されているコマンドを、シェルフに登録してみましょう。
- スクリプトエディタ のヒストリウインドウ、
またはインプットウインドウに表示されているコマンドで、
シェルフに登録したいコマンドをマウス左ボタンで選択します。
- 選択された部分の上で、マウスの中ボタンをクリックし、ドラッグ&ドロップでシェルフまで移動します。
- シェルフに新しいアイコンが作られます。
- そのアイコンをクリックすると、登録したコマンドが実行されます。
逆に、シェルフに登録したコマンドを スクリプトエディタ にコピーしたい場合は、
コピーしたいシェルフのアイコン上でマウス中ボタンをクリックし、
ドラッグ&ドロップで スクリプトエディタ のインプットウインドウへ移動します。
また、不要になったシェルフのアイコンは、シェルフの右にあるゴミ箱アイコン
に、マウス中ボタンでドラッグ&ドロップすれば消去することができます。
Tips
マウス左ボタンで、スクリプトエディタ 内のコマンドを選択する場合に、
以下の方法を知っておくと効率良く選択することができます。
- ダブルクリック
単語 1 個分を選択
- 3 回連続クリック
1 行分を選択
- 4 回連続クリック (Linuxのみ)
ウインドウ内全体を選択
まとめ
- ここで紹介した MEL コマンドの実行方法には、以下のものがあります。
この他にも様々な実行方法があります。
- スクリプトエディタ によって、 GUI による操作がどのような MEL のコマンドによって実行されているかわかります。
- スクリプトエディタ において MEL コマンドを複数実行する時は、 MEL コマンドの最後に ; をつけます。
- プリミティブを作る MEL コマンドにはsphere、cone、 nurbsCube、 cylinder、nurbsplane、torus, polyTorusなどがあります。
- 移動(Translate)、回転(Rotate)、拡大・縮小(Scale)は move、rotate、scale コマンドで実行します。
参考
Next
Home | Contents
Mail