表示されないMelコマンドを知る方法:初心者編

クリーク・アンド・リバー社 COYOTE CG STUDIO テクニカルチームの戦国時代に実在していて驚いた武将と言えば山本勘助、戦国大好き人間の中林です。

今回は作業中にふと思いだした、本当に初心者向けのネタです。僕がMelを始めたころにここで苦労したという内容です。もし、Melを始めたばかりに同じところに悩んだ人がいれば参考にしてください。

Melの初歩といえばスクリプトエディタのログ

これは今更の内容ですが、Melで最初でころにやるのはスクリプトエディタを開いて手動でその作業をして、そのログを利用することです。

例えばスフィアを作成すると上図のようにログが表示されます。この一行目のCreatePolygonSphere;をコピーして、下部の入力エリアにペーストして「テンキー」側のEnterキーを押すと新たにスフィアが作られます。
「アルファベットキー」側の方のEnterキーはソースの改行なので、一番最初は戸惑うかもしれません。
実はMayaは手動で作業して、そのログからMelをコピペするだけでも作業が再現できます。これが他のグラフィックツールのスクリプトから比べてMelが簡単と言われる所以です。

ただし、ログに表示されないコマンドもある

同時にMelで初期に詰まるのがログに表示されないコマンドもあるところです。多くの処理ではログが表示されるのですが、Melを多用するようになると見かけるようになります。
僕が最初にハマったのはlambertなどの基礎シェーダーの作成です。


こちらの1行だと下図の上のようにシェーディングノードにつながっていない状態になります。

Melに慣れてくれば続く2つの命令でシェーディンググループを作成して、それを接続をしているのは分かるのですが初心者にそこまで分かれとは酷です。
実はこの時に1行目の前にログに表示されていないコマンドがあります。この見えないコマンド見るための方法を2つ紹介します。

方法➀アンドゥでコマンドが表示される

コマンドを実行して、即アンドゥをするとログに// 元に戻す: コマンド //が表示されます。実行直後のコマンドとアンドゥのコマンドが違った場合はアンドゥ側のコマンドが正しいことが多いです。

僕はログからMelスクリプトをコピーすることがある場合は実行してアンドゥをする癖をつけています。
※この方法は弊社で2019年10月27日に行われたMayaオフ会で講演していただいたCG自習部屋のAriさんが紹介してました。その時の会場で知らなかった反応をする人も多かったので、僕的には良く使うけど意外と盲点の裏技です。

ただし、アンドゥでも表示されない(アンドゥできない)処理でコマンドが表示されない場合もあります。
主にメニュー系の表示で多いです。なぜなら、アンドゥしたらメニューを閉じる処理なんてないですから。僕が最初にハマったのはハイパーシェードのウィンドウをスクリプトで開きたいと思った時です。
その時は方法➁です。

方法➁すべてのコマンドをエコー

僕的にはできればお世話になりたくない方法ですが、【ヒストリ>すべてのコマンドをエコー(history>Echo All Commands)】にチェックを入れます。


これで、実行した瞬間にコマンドと共に大量のログが表示されます。このログを遡ってコマンドを探すと見つけることができます。
因みに前出のハイパーシェードのウィンドウはHypershadeWindow;で開けることが分かります。
これの欠点はタダでさえログが長い上に、特定のメニューを触っただけでログが出ることもあるので目的のコマンドを見失い易いことです。
なので、僕もどうしてもコマンドが出てこないときの奥の手として使いますが、できれば使いたくない方法です。そして、チェックを付けたままだとログがドンドン流れるので、すぐに外してます。
実際にcreateRenderNodeCB -asShader "surfaceShader" lambert ""は➀でも➁でも知ることはできますが、見つけるときの手間が全然違います。

方法➁はMayaの公式にも書かれているので、いつかは辿り着くし苦労して使うことはあると思います。ただ、意外と方法➀は知らないという人が僕の周りに多かったので、初心者向けの内容ですが紹介をします。

Author: 中林 伸和