MEL合宿 -9日目-




MEL合宿 -9日目-は、「snowMan2」のアップグレードです!

前回作成した状態では、ノードを作りっぱなしで整理されていないのでOutlinerがグチャグチャ、、、ノード名もつけていないのでわかりにくい、、、(#゚Д゚) ゴルァ!!

自動リグにしても、自動マテリアル生成にしても、ツールで作る時にノード名をちゃんと付けてあげると、使い勝手がぐーっと変わるのでオススメです!(*´ω`*)

また、ノード名は、社内ルールに沿って付けてあげると人為的ミスの削減にもつながります!

最終的に以下のようになるように調整したいと思います!

前回のコードから加筆する形でやって行きたいと思います(*´ω`*)b

global proc snowMan2(){
    float $radius = 1.0;
     
    polySphere -radius $radius;
    move 0 $radius 0;
     
    float $headRadius = $radius * 0.65;
    polySphere -radius $headRadius;
     
    float $headPosition = $radius * 2 + $headRadius;
    move 0 $headPosition 0;
}

手順は以下の通りです!

  1. グループを作る
  2. 頭と体に名前をつける
  3. 階層の変更
  4. 動作の確認

グループを作る

MELでグループを作成するコマンドは「group」です。名前が「snowMan_grp」で、空っぽのグループを作るにはどうしたらよいでしょう、、、(´・ω・`)

初めて使うコマンドなので、MEL例を見てみると、、、

// create an empty group node with no children
group -em -name null1;

というコードが頭にありますね!

フラグ「-em(-empty)」の説明を見てみると、空のグループを作成するのに必要なものだとお分かりいただけると思います(`・ω・´)ゞ

フラグ「-n(-name)」は、そのままですね!ノード名の指定をするフラグですv(*´ω`*)v

ただし!

ノードの名前を指定する時は、必ずしも指定した名前で作られないっということに注意しなくてはいけません(´・ω・`)

Mayaは同じ名前のノードを同じ階層に作ることができないので、雪だるまを作りまくるとノード名が保証されなくなってしまいます。。。orz

そこで役立つのが、、、

戻り値」デス
。*:゜☆ヽ(*’∀’*)/☆゜:。*。

コマンド「group」の戻り値は「string – グループノード名」なので、もーーーーし名前がちょっと変わってしまっても、作成したノード名をちゃんと覚えさせておくことができます!(゚∀゚)

これを踏まえてコードを書くと、、、

global proc snowMan2(){
	string $group = `group -em -n "snowMan_grp"`;
	
	float $radius = 1.0;
	
	polySphere -radius $radius;
	move 0 $radius 0;
	
	float $headRadius = $radius * 0.65;
	polySphere -radius $headRadius;
	
	float $headPosition = $radius * 2 + $headRadius;
	move 0 $headPosition 0;
}

になります!(`・ω・´)ゞ

コマンドの戻り値を受け取って、変数に定義と代入をしたい時は以下のように書きます!これを「アサイン」と言います(`・ω・´)ゞ

型 $変数名 = `コマンド`;

コマンドを「`(バッククオート)」で囲ってあげます!ちょっと見慣れない文字ですね。。。頑張って探してください!∠( ゚д゚)/

ポリゴンスフィアに名前を付ける!

polySphere」のヘルプを見てみると、名前を付けるフラグは「-n(-name)」だとわかるかと思います!「group」の時と同じですねっ!目的が同じフラグは、けっこう名前が統一されています(*´ω`*)b

こちらも、指定したノード名が既に使われていると、指定した名前になるとは限りません。。。なので、戻り値を受け取って、もし名前がちょっと変わってしまっても問題ないようにしたいと思います。

しかし!
groupとちょっと違う

戻り値を見てみると「string[] オブジェクト名とノード名」になっていますね。型の名前に「[]」がついたものは、「配列」と言われるものになります。

配列とは、1つの変数の中に複数の値を入れることができるものです。クッキーの箱のようなものです。

箱に書かれた数字を「インデックス」と言います。配列のどの値を使いたいか指定する場合は、インデックスを使います。最初間違えやすいのですが、最初は「0」から数えます!

polySphereでは、以下のように戻り値が作られています!主に使いたいのは、0番目のTransform名です!(`・ω・´)ゞ

では、頭と体に名前をつけて、戻り値を受け取りましょう!配列の変数を作る時は、「型 $変数名[]」とします!

global proc snowMan2(){
	string $group = `group -em -n "snowMan_grp"`;
	
	float $radius = 1.0;
	
	string $body[] = `polySphere -radius $radius -n "snowManBody_geo"`;
	move 0 $radius 0;
	
	float $headRadius = $radius * 0.65;
	string $head[] = `polySphere -radius $headRadius -n "snowManHead_geo"`;
	
	float $headPosition = $radius * 2 + $headRadius;
	move 0 $headPosition 0;
}

階層の変更

階層の変更をするにはコマンド「parent」を使用します!「parent 子にしたいノードの名前 親にしたいノードの名前」というように使います!戻り値を受け取った変数を使って、階層を変更しましょう!

配列のデータを使いたい時は、「$変数名[取り出したいインデックス]」と書きます!

global proc snowMan2(){
	string $group = `group -em -n "snowMan_grp"`;
	
	float $radius = 1.0;
	
	string $body[] = `polySphere -radius $radius -n "snowManBody_geo"`;
	move 0 $radius 0;
	
	float $headRadius = $radius * 0.65;
	string $head[] = `polySphere -radius $headRadius -n "snowManHead_geo"`;
	
	float $headPosition = $radius * 2 + $headRadius;
	move 0 $headPosition 0;
	
	parent $body[0] $group;
	parent $head[0] $group;
}

動作の確認!

Mayaを起動して、ノード名や、階層が目的の状態になっているか確認してみましょう!

名前を決め打ちにせず、必ず戻り値を使うようにしたので何度実行してもエラーしなくなりました!ツールを作る上で、名前を決め打ちにしてしまうと思わぬバグの原因になるのでご注意を!!(`・ω・´)ゞ

まとめ!

  • グループを作るコマンドは「group
  • 階層を変更するコマンドは「parent
  • 作成するノードの名前を指定しても、「必ずその名前になるとは限らない」!
  • 戻り値をうまく使って、指定した名前が変わっても対応できるようにする!
  • 戻り値を受け取る場合は、「型 $変数名 =`コマンド`;」と書く(アサイン)!
  • 配列は、複数のデータを扱うことができるクッキーの箱のようなもの!
  • 配列は、「インデックス」という番号で管理されている!
  • インデックスは、「0番」から数える!
  • 配列の値を使う時は「$変数[インデックス]」と書く!

次回は、プログラムの流れを制御する「制御構造」を見ていきたいと思います!
お楽しみに!(*´ω`*)b







Maya x Pythonの技術書
たっきゅんのガチンコツール開発部 Maya Python 101
(CG Pro Insights)

もっとMayaを便利に使いませんか!?実用性のあるツールを例にPythonが学べるように、がんばって執筆させていただきました!是非、この機会によろしくお願いいたします!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

たっくん

フリーランスのCG屋さん 兼 専門学校の非常勤講師。