先日、大洗の古墳群を見てきて戦国時代も良いけど大王の時代にロマンを馳せるのも良いものだと思いました。どうも、クリーク・アンド・リバー社 COYOTE 3DCG STUDIO テクニカルチーム 戦国大好き人間の中林です。
では、ブログに向けてパンツァー・フォー!!
MELの処理するために無理やり選択してませんか?
MELの初心者に相談を受けた時に共通する内容があったので紹介。
ちなみに僕も初心者の頃に同じ勘違いをして、何度もオブジェクトを無理矢理選択していた頃がありました。
先ずはオブジェクトを移動して、移動のMELコマンド情報を取得してみましょう。
「move -r -10 0 0」 というMELコマンドを取得できます。
ちなみに-rはフラグのショートネームで、正式には「relative(r)」でオブジェクトの現在位置に対して相対的な操作を実行します。
相対移動なので、今の位置を基準に-X方向に10移動してます。
MELを利用して移動しよう!! どのオブジェクトを?
早速、pCube1を選択してコマンドを実行してみよう。
コピペするだけで簡単に移動できました。
これがMayaのMELが初心者向けで良いところなんですよね。
では、わざとらしく隣に置いたpCube2を選択してコマンドを実行してみよう。
選択したpCube2が移動しました。
出てくるコマンドの多くは選択をしているオブジェクトに対する処理です。
このために僕も初心者の頃はどうやって処理をしたいオブジェクト選択をしようかと考えました。
多くは直前のMELコマンドの処理で選択されていたけど、そうでない場合はselect -r オブジェクト名で無理矢理選択していたりしました。
ユーザーに対して最初にオブジェクトを選択をしてくださいと口頭で言う解決方法が最も多かった気もします。
でも、沢山のMELに触れるとコマンドの最後に文字列や変数が付いてる記述を多く見かけました。
そもそも、MELのコマンドリファレンスのmoveコマンドのMEL例でも
polySphere;
move 1 1 1;
move -y 5;
move -relative -objectSpace -worldSpaceDistance 1in 1in 1in;
move -absolute 0 0 0 pSphere1;
MEL例ではpolySphereだけど最後にオブジェクト名が付いてる。
それでは試しにpCube1という名前を付けてみると……
選択をしてようが、してまいがpCube1が移動しています。
コマンドの最後にオブジェクト名を入れれば選択しなくてもオブジェクトを指定できます。
任意のオブジェクト名が取得できればユーザーに選択させる必要もなくなります。
これはmoveコマンドに限らず多くのMELコマンドでできます。
コマンドによってはオブジェクト名は複数指定できる場合もあります。
Pythonでもオブジェクト名で指定可能
弊スタジオのTAチームはMELではなくPythonがメインの言語になってます。なのでついでにPythonでの例も載せておきます。
Pythonでも指定する場所は前後するけどオブジェクト名で指定できます。しかも、文字列でも文字配列でも指定できるので使える幅が大きいです。
※大抵はオブジェクト名は先頭だけど、moveコマンドのようにオブジェクト名の位置は座標の後ろと特殊な場合もあります。
初心者の勘違いポイントだけど選択は必ず必要ではない
僕も初心者の頃はそうだったけど、MELのコマンドのコピーではオブジェクト名が入っていません。そのため独学してた頃は処理で偶然選ばれた状態を利用するかselect -r オブジェクト名で選択してました。
他の人のツールのスクリプトを見ていてもcmds.select(‘オブジェクト名’)を見かけることは少なくありません。
この辺を知るキッカケになったのは、他の人が公開してくれてるMELやwhatIsコマンドで見つかるMaya内部のmelファイルを繰り返し見たことです。
いきなり変わる必要はありませんがselectコマンド等を多用してる人は、少しずつ使う回数を減らすように試してみてください。少しの変化ですがスクリプトが分かりやすくなります。