前回の続きです。なんだか解らないけど動きました。 マイクロソフトのエクセルとかの「マクロ」のようなものだと判ればOKです。
今日はこれが何なのかを説明していきます。 この1行1行がMELの命令であるのは理解できたと思います。その1行ごとに
// やっていること
と書いていきます。前回と違いは名前が「test2」にして、一番下に2行加えました。
ゴチャゴチャしてわかりにくい!という方はMayaのスクリプトエディタへドラッグしましょう
色分けして読みやすいですね。CTRL+Enterすれば先日と同じようにX=3のキューブが出るはずです。最後の2行でMEL起動命令を入れてあるので、すぐに動くのです。 新規作成して、maya画面上にドラッグしても同様です。
さて、上の画像を見てください。文字の色が4色ありますね。1行1命令になっています。各行の最後に必ず「;(セミコロン)」があるのが重要です。これが無いだけでエラーで動きませんからイライラします。
1.赤=「//」が付いているのは、人間が書いた実行しない行(コメント文という)。ここはセミコロンは不要です。 2.水色=MELの命令 3.黄色=Mayaのパーツ名.アトリビュート名 4.グレーと緑=その他の値
赤い行で人間がやった作業だけ①~⑥まで番号を付けています。 個々の命令の意味を理解する必要はありませんが、15行~18行は人間の操作をMELがやっているだけ、ということが判るでしょう。 実はここは削除しても、ちゃんと動きます。
では、本題です。Mayaというツールを使っている方は様々な操作をしてきたと思いますが、実はやっていることはシンプルなのです。
A:ノードを作る B:ノードのアトリビュートに値を入れる C:ノードとノードのアトリビュートを繋ぐ
まず、基本この3つです。他にもありますが、それは追って説明します。 「ウインドウ」→「ノードエディタ」と「ハイパーシェード」を開いてみます。
プリミティブを作ったり、シェーダーを作ったりするのは「ノードを作る」ということです。
カメラ、ライト、ジョイント、IKハンドル、テクスチャーや「押し出し」もノードです。 さらに「ウインドウ」→「ハイパーグラフ」階層も出してみましょう。
気づきましたでしょうか?実はハイパーシェード、ノードエディタ、ハイパーグラフは「同じもの」だったのです!
そして、そのノードとノードが繋がることで様々な処理をしているのです。
さらに各ノードをクリックすると、アトリビュートエディタが自動で切り替わり、値を設定できることはご存知ですね。このタブ1つ1つがノードなのです。
では、「アウトライナ」とは何でしょう?Cubeを選んで「カーソル↓」キーを押してみましょう。
アウトライナでは何も選ばれなくなりました。しかし、ノードエディタでは「pCubeShape1」という「シェイプノード」が選ばれました。 アトリビュートを見ればわかりますが、「pCube1」は位置、回転、スケールしかないロケータみたいなもので、「pCubeShape1」はBlinnが繋がってレンダリングに関係するものなのです。
では、「PolyCube1」はなんでしょう?
お分かりですね?これはポリゴンの大きさや分割数など大きさを司っているのです。 「チャネルボックス」を見るとこの3つのノードを一度にまとめて操作できるのです。
いまさらですが、「チャネルボックス」とはアトリビュートと同じです。アトリビュートが表示が多く面倒なので、抜粋したダイジェスト版がチャネルボックスなのです。
シェーダーのアトリビュートで上のボタンを押したことはありますね?これはつながっているノードの上下に移動する、という意味だったのです!
話を最初に戻します。MELはMayaのノードのアトリビュートを設定したり、繋いだりするのを各ウインドウを使った「手動」ではなく、プログラムを使った「自動」で行うことなのです!
そこでMELの命令をもう一度見てみましょう。
// ポリゴンキューブ「pCube1」を作る① polyCube -w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1 -ax 0 1 0 -cuv 4 -ch 1; // キューブをX=3に移動する② setAttr "pCube1.translateX" 3;
これは、①でノード作成、②がアトリビュートを書き換えをしています。 polyCubeがポリゴンの箱を作る命令で、その際に-w 1 -h 1 -d 1 -sx 1 -sy 1 -sz 1がサイズとスケールを設定する項目です。 setAttrという命令が「アトリビュートを設定しなさい」でpCube1.translateX 3が箱を移動X=3です。
// 「Blinn1SG」にBlinnを繋ぐ connectAttr -f blinn1.outColor blinn1SG.surfaceShader; connectAttrという命令が、blinn1.outColorとblinn1SG.surfaceShaderを接続してるのです。
他の行も意味は良く解らないでも、MELとMayaの仕組みが理解できればOKです。 今日はここまでです。