MEL合宿 -8日目-

MEL合宿の8日目は、コマンドについてお話した後に、「変数と掛け合わせて」見ていきたいと思います!(`・ω・´)ゞ

コマンドのおさらい

MEL合宿 -1日目-」で、、、

MELは、ゲームの「戦う」「逃げる」といったコマンドと一緒で、「スフィアを作れ!」「動かせ!」といったMayaを操作するために用意された「コマンド」で構成されています(*´ω`*)

1つ1つのコマンドは単純な役割ですが、複数のコマンドを組み合わせることで色々な事ができます!

と、お話させていただきましたっ!まだまだ、単純な使い方しかしていませんので、少しステップアップしていきたいと思います!

コマンドのヘルプ

まずは、コマンドについてちょー詳しく書かれた公式のヘルプがあります。きっと長いことお付き合いすると思いますw

まずは、以前使ったことのあるコマンド「polySphere」のヘルプを見てみましょう(*´ω`*)b

Mayaのメニュから「Help→Maya Scripting Reference→MEL Command Refenrece」を実行します。すると、ブラウザでMELコマンドについてのヘルプの入り口が表示されます。

オンラインヘルプの左側のメニューから「テクニカルドキュメント→MELコマンド」からもアクセスできます。

サブストリングで検索」に「polySphere」と入力し、検索結果のリンクをクリックします。

このページには、polySphereの概要、戻り値、関連コマンド、フラグ、MEL例が書かれています。

しかも日本語で!
(゚∀゚)

今はまだ難しいかもしれませんが、もう少しコマンドの概要が頭にはいるととっても頼もしいヘルプになります。是非、ブクマに入れておきましょう(`・ω・´)ゞ

概要

概要の欄には、コマンドの使い方、どんな事ができるか書かれています。「polySphere」では、「新しいポリゴン球を作成します。」、、、まぁーそのままの意味ですねw

戻り値

コマンドを実行した結果の情報」を「戻り値」と言います。一般的に、処理が成功した・失敗したという情報をもらったりします。「polySphere」は、「オブジェクト名とノード名」とあるので、作成したpolySphereのノード名と、Transform名を押してくれます。「string[]」は値の型です。「string」はやりましたが「string[]」と最後に余計なものがついてますね!コレについては別の機会に説明します!(`・ω・´)ゞ

関連

関連の欄には、類似したコマンドのリンクが貼られています。「polySphere」では、ポリゴンプリミティブ関連のコマンドが書かれていますね(*´ω`*)b

フラグ

フラグは、わかりやすくいうとオプションです。「polySphere」では、Sphereを作成するときの分割数や方向などを指定することができます。指定しないフラグは、デフォルトの値になります。Mayaのオプション設定とは無関係なので、ご注意ください!

MEL例

MEL例の欄には、該当のコマンドを使った例文が書かれています。たくさんサンプルがあったり、ちょっとしかなかったり結構気分屋ですが、もしかするとプログラミングのヒントが眠っているかもしれません!初めて使うコマンドは、一度は目を通しておくと良いかと思います(`・ω・´)ゞ

コマンドのモード

polySphere」の「フラグ」にある「プロパティ」の項目を見てみると、「C」「Q」「E」とアイコンがありますね、、、実は、コマンドには「Create」「Query」「Edit」の3つのモードがあって、使えるフラグや動作が変わってきます。

とりあえず、こんなものがあるんだーっと覚えておいてください(`・ω・´)ゞ

Create

Createは、日本語で言うと「作成モード」です。簡単に言うとノードを作ったりするモードです。後述のQuery、Editでない場合に、Createとして動作します。

ここまでのMEL合宿では、この「Create」しか使っていません。

Query

Queryは、日本語で言うと「照会モード」です。コマンドに、フラグ「-q(または-query)」をつけます。同時に指定したフラグの値を調べることができます。「polySphere」で言うと、Sphereの大きさ、方向といった情報をGETして変数に代入できます。

Edit

Editは、日本語で言うと「編集モード」です。フラグ「-e(または-edit)」をつけます。同時に指定したフラグの値を変更することができます。「polySphere」で言うと、Sphereの大きさ、方向といった設定を後から変更します。

変数と掛け合わせて使ってみよう!

またまた題材は「雪だるま」でやってみたいと思います!同じものばっかりでスミマセン!(´;ω;`)

今回は、以下の流れで作成していきたいと思います!(`・ω・´)ゞ

  1. プロシージャを作る!
  2. ファイルの保存!
  3. 体の大きさを決める変数を作る!
  4. 体用のポリゴンスフィアを作る!
  5. 体を地面の上に移動!
  6. 頭用のポリゴンスフィアを作る!
  7. 頭を体の上に移動させる!
  8. Mayaで確認!

プロシージャを作る!

Notepad++」などのエディタを起動していただき、「snowMan2」という名前のプロシージャを作成します。

global proc snowMan2(){
}

ファイルの保存!

プロシージャが用意できたところで、一度ファイルを保存しましょう!保存先、ファイル名は以下の通りです。

保存先 <ドキュメント>\maya\scripts
ファイル名 snowMan2.mel

体の大きさを決める変数を用意します!この変数の値を変えれば、簡単に雪だるまの大きさを変えられるようになります(*´ω`*)b

体の大きさを決める変数を作る!

型は「float」、変数名は「radius」、値は「1.0」にしたいと思います!

global proc snowMan2(){
	float $radius = 1.0;
}

体用のポリゴンスフィアを作る!

体の大きさを決める変数を使って、体用のポリゴンスフィアを作成します(*´ω`*)

ポリゴンスフィアの大きさを決めるフラグは「-radius」です。コマンドと、フラグと、フラグの値をスペースで区切りながら書いていきます!

global proc snowMan2(){
	float $radius = 1.0;
	
	polySphere -radius $radius;
}

 

体を地面の上に移動!

ポリゴンスフィアを作っただけでは、地面に埋まった状態なので地面の上に載せてあげたいと思います。ただ、変数に設定した数値で体の大きさが変わってしまうので、キチンと計算して位置を割り出さないといけませんね(;´∀`)

polySphereの「radius」がどんなフラグだったかヘルプを見てみると、「 球の半径を指定」とありますね!図にすると、かえって難しく感じてしまうかもしれませんが、半径の分だけTranslate Y方向に移動させてあげると、体のポリゴンスフィアが地面の上にちょーど来ます(`・ω・´)ゞ

体の大きさを決める変数「radius」を使って、体を移動させます!移動させるコマンドは「move」でしたね!

global proc snowMan2(){
	float $radius = 1.0;
	
	polySphere -radius $radius;
	move 0 $radius 0;
}

頭用のポリゴンスフィアを作る!

続いて、体と同じ要領で頭用のスフィアを作りたいのですが、同じ大きさではキモイですね(;´∀`)

前回の雪だるまの、体と大きさの比率を求めると「0.67倍」になっています。今回もこの比率を使って、頭を体より少し小さく作りたいと思います(`・ω・´)ゞ

頭1に対して体が1.5倍だったので、「1 ÷ 1.5」と計算することで、体1に対しての頭の大きさが求められます。

最初に「$radius」の「0.65倍」の数値を計算して、頭の大きさを変数「headRadius」に代入します。この変数を元に、頭用のポリゴンスフィアを作ります。

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

頭を体の上に移動させる!

頭の位置を体の上に移動させていきたいですが、体の位置とは違いちょっと難しそうですね。図にして移動量をどうするといいか、整理してみましょう!

こうしてみると、頭の位置は「体の直径+頭の半径」でピッタリ乗っかりそうだということがわかりました!

変数「radius」は体の「半径」なので、直径にするために「2倍」にする必要があります。変数「headRadius」は頭の半径なのでそのまま使えそうです!これを、プログラムの式にすると「$radius * 2 + $headRadius」ですね!これを、変数「headPosition」に代入してから移動させましょう!

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;
}

Mayaで確認!

Mayaを起動して、Command LineかScript Editorに「snowMan2」と入力して、雪だるまが作成されるか確認しましょう!もしエラーしてしまった場合は、「MEL合宿 -2日目-」を参考にしてください(`・ω・´)ゞ

まとめ!

  • コマンドの使い方や詳細は「MEL Command Refenrece」を見るべし!
  • 戻り値」とは「コマンドを実行した結果の情報
  • コマンドの「フラグ」とは、わかりやすく言うと「オプション
  • コマンドには「Create」「Query」「Edit」のモードがある!

次回は、「snowMan2」をもう少しレベルアップさせたいと思います!(`・ω・´)ゞ
お楽しみに!