文系デザイナーのためのmaya MEL/Python基礎の基礎③

前回の続きです。なんだか解らないけど動きました。
マイクロソフトのエクセルとかの「マクロ」のようなものだと判れば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です。
今日はここまでです。

 

ロシア映画“Attraction”のVFXメイキング

むずかしいチュートリアルばかりでは楽しくないので、VFXが素晴らしい作品紹介も、このブログでやってきます。

今週はロシア映画「Attraction」です。2017年1/26公開だそうです。
http://www.artofvfx.com/attraction-prityazhenie/


ロシア語で内容が全然判りませんが(笑)、VFXのデザインと迫力が素晴らしいと思ったのでお伝えしようかと(日本で上映しないでしょう・・・)

コンセプトアートとBreakdownはこちら。
ほぼフルCGです。街の破壊とエイリアンのアニメーションが素晴らしい!
制作は「Main Road Post Vfx Studio」という会社で、モスクワにあるそうです。

文系デザイナーのためのmaya MEL/Python基礎の基礎②

先週の続きです。まずは今週の便利なMELツールの紹介です。



ダウンロードして解凍すると、このようなファイルがあります。「Help.png」があるので開いてみます。


どうやらマニュアルのようです。「1」はドキュメントのmaya→prefs→iconsに「icons」の中身を入れなさい、とあります。ここでMayaは起動してはいけません。
ここで注意なのですが、日本語版Mayaの場合は、ja_JP→prefs→iconsなのです。

「2」はmayaを起動して、スクリプトエディタでFile→LoadScriptでMELを選びなさい、とあります。

「3」でFile→Save Script toSelfを実行します。

名前を付けます。「Mesure」にしておきます。

わざとやったのですが、実は5文字しか表示できません。
右クリックから「編集」します。

前回と同じく「アイコン名」のフォルダアイコンをクリックすると、フォキュメンとの「icons」フォルダに行くので「4」にあるように「K_MeasureTool_SHELF_ICON.png」を選びます。起動アイコンができますからクリックしてみてください。

これで今日のMeasureToolsは起動できました。この手順がほぼ正しいMELの登録方法です。

このツールは頂点モードで2点を選ぶと長さを図ってくれたり、その値をオブジェクト上に配置できます。インチ、フィート、ヤードの換算もついてます。ゴミ箱で消せるのも嬉しいですね。

「スケール合ってるのかな?」という時、便利ですね。
ネットでダウンロードできるMELのツールは大体この方法で設定できますのでチャレンジしてみてください。

さて今日はプログラムを書いてみましょう。まず、今日の「MeasureTool_v1_1.mel」をテキストエディタで開いてみましょう。
MeasureToolをダウンロードして設定してない人はやらないで読み進めてOKです。

600行も意味不明な呪文が出て来ます・・・いえいえ、怖がらないでちょっとよく見ると、
proc ?????()
{
?????????
}
みたいな箇所がいくつかあります。

プログラムとはコンピュータ(この場合はmaya)へ命令します。
適当に言っても理解してくれません。ルールが必要なのです。

「命令」とは先週やりましたが、Mayaの操作はすべて命令なのでしたね?

前回もやりましたがスクリプトエディタを綺麗にしておきます。
では、プリミティブのポリゴン箱を出して、Xに3移動して、ハイパーシェードでBlinnで赤くしてください。

上のウインドウに、なんかたくさん書かれています。
最初にある「CreatePolygonCube;」の次の行以降をハイライトしてコピーします。
Mayaを「新規」にしてスクリプトエディタの下のウインドウにペーストしてCTRL+Enterしてください。

すると、箱が勝手に出て、X=3、でBlinnで赤くなってます。スクリプトエディタは上の段がMayaが何をしているか、されたか、を記録しているのです。それ自体がMELなのです。
新規作成して、そのMELを下のウインドウで実行すれば、どんなに長い手順でも一瞬で実行してしまいます。

// 結果: pCube1 polyCube1 //」の行はMayaが「やったよ」と報告しているのです。
そもそも「//」というのが最初にあるのは命令ではないのです。
それを全部削除して、先程話をした、proc test() { }を書き入れます。


これでMELの完成です。testはなんでも構いません。これを「test.mel」で保存します。

Mayaを再度新規作成し、できた「test.mel」をスクリプトエディタへドラッグして、CTRL+Enterします・・・何も起きないですが、下のウインドウが綺麗になったのでプログラムは正解です。

図のように「test;」(セミコロン)とキー入力してCTRL+Enterします。すると赤い箱がX=3で出ます。

プログラム自体の意味は良く解らなくても結構です。MayaはMELの命令を1つ1つ実行します。それを人間がやっても無駄です。なので命令を複数書いた行を以下のルールで書くのです。

proc 自分で作った新しい命令() {
MEL命令1;
MEL命令2;
MEL命令3;
 :
 :
}

するとMayaは設定された命令通りに手間のかかる作業を一気に実行するのです。
今日はここまでです。次回は1つ1つの命令の意味を説明します。