• 検索結果がありません。

デザイン戦略(コンピュータアニメーション) 2009年度春学期

N/A
N/A
Protected

Academic year: 2021

シェア "デザイン戦略(コンピュータアニメーション) 2009年度春学期"

Copied!
6
0
0

読み込み中.... (全文を見る)

全文

(1)

第3回 「MEL の基礎(1)

■ MEL の基礎

MEL(Maya Embedded Language)は Maya の中心となるスクリプト言語で、Maya の GUI 上での 作業は MEL コマンドの実行と言い換えることもできる。スクリプトエディタを開いて、Maya の GUI 上で作業を行うと、その作業に対応した MEL がスクリプトエディタ上に表示されるのを観察できる。 3DCG 制作においては、繰り返し類似した処理を行うことが多いが、その際に、この記録されたスク リプトを活用し、簡単なプログラムを記すことで、作業の効率化を図ることが可能となる。 図 3-1: スクリプトエディタの起動ボタン 図 3-2: スクリプトエディタ 演習1:スクリプトエディタを開き、その後、球体を作成し、表示されるスクリプトを観察しなさい。 スクリプトエディタの起動は画面の右下のボタン。 例えば、シェルフの[ポリゴン]から[ポリゴン 球体]を実行するとパースヴュー内に球が現れると同時 に、スクリプトエディタに次のような MEL スクリプトが表示されたはずである。 polySphere –r 1; 演習2:今度は、一度球体を選んで[Del]を押して削除し、スクリプトエディタの[MEL]の部分に 上記を入力して実行し、何が起こるか観察しなさい。 [スクリプトエディタ]

(2)

■ プロシージャー

プロシージャー(procedure; 手続き)とは、複数のコマンド、関数、プロシージャーなどをまとめて、 ひとつの部品のようにしたものである。文法は C 言語とシェルスクリプトのハイブリッドとなってお り、変数、制御構造などが使用でき、return 文によって返り値を返すことができる。

[global] proc [return type] <プロシージャーの名前>( [引数, ...] ) { [MEL の文] } なお、[...]の部分は省略可能となっている。同じ名前のプロシージャーがあれば、より後に定義された ものが有効となり、先に定義されたものは機能しなくなるため注意が必要である。また、関数と同じ 名前のプロシージャーを作ることはできないことにも注意が必要である。

global proc helloWorld() {

print "Hello World !!"; } スクリプト 3-1: helloWorld.mel 演習3:下記の内容を実行してみなさい。 1. テキストエディットを開き、スクリプト 3-1 の内容を書き込んで helloWorld.mel というファイ ル名で保存してみなさい(「拡張子が指定されていない場合は“.txt”を使用」のチェックを外す)。 ファイルは、プロジェクトで指定した MEL のフォルダ(図 2-7 参照)に保存すること。 2. スクリプトエディタから [ファイル] -> [ソース スクリプト] で helloWorld.mel を読み込む。 3. コマンドラインに helloWorld(); と打ち込んで実行し、「Hello World !!」の表示を確認する。

global proc ex32() { // 1st polySphere -r 1; move 5 0 0; rotate -ws -p 0 0 0 0 120 0; // 2nd polyCone -r 1 -h 3; move 5 0 0; rotate -ws -p 0 0 0 0 240 0; // 3rd polyCube -w 1 -h 2 -d 1; move 5 0 0; rotate -ws -p 0 0 0 0 360 0; } スクリプト 3-2: ex32.mel 演習4:スクリプト 3-2 を実行してみなさい。また、GUI 上で任意の3つの立体を作成し、その作成 時の MEL スクリプトを観察しなさい。そして、スクリプト 3-2 の立体を作る部分をその観察し たものに置き換え、読込なおして実行してみなさい。(//から行末まではコメント行)

(3)

■ 変数

変数とは数字などの情報を入れておく箱のようなものである。この箱に名前を付ける際には、英数字 と _ (アンダースコア)を使うことができる。変数を使う際には、変数名に $ マークを付ける。ま た、箱(変数)には型があり、中に入れる情報の種類により使い分ける必要がある。 整数型 int 例: 5 実数型 float 例: 7.5

文字列型 string 例: “Hello World!!” ベクトル型 vector 例: <<3.0, 7.7, 2.5>>

マトリックス型 matrix 例: <<2.0, 1.5, 3.3; 5.5, 2.0, 1.8>> global proc helloWorld()

{

string $str = "Hello World !!"; print $str; } スクリプト 3-3: helloWorld.mel 演習5:helloWorld.mel をスクリプト 3-3 のように、文字列を変数に格納してから表示する形式に 改造してみなさい。 スクリプト 3-3 で、= は右のものを左の変数に代入しなさい、という意味であることに注意する必要 がある。つまり最初の行では、string 型で$str という名前の変数を作り、そこに"Hello World !!"と いう文字を代入するということをしている。次の行では、$str という変数の中身を取り出して画面に 表示するということをしている。つまり、スクリプトは上から順に下へ実行され、同じ行内では右か ら左へ実行されるという特性を持っているため、そのことをよく理解しておくことが大切である。

global proc myRotate(int $r) {

move 5 0 0;

rotate -ws -p 0 0 0 0 $r 0; }

global proc ex32() { polySphere -r 1; myRotate 120; polyCone -r 1 -h 3; myRotate 240; polyCube -w 1 -h 2 -d 1; myRotate 360; } スクリプト 3-4: ex32.mel 演習 6:ex32.mel をスクリプト 3-4 のように、指定した角度を回転させるプロシージャを作成し、 そのプロシージャを角度を指定して呼び出す形式に改造してみなさい。また、回転角度を変えて その様子を観察してみなさい。再実行の際は、既存オブジェクトを削除してからおこなうこと。

変数名:

(4)

■ アサイン

多くの MEL コマンドには返り値があり、その返り値を変数に代入することをアサインという。アサイ ンする際には、実行するコマンドを ` (バッククォート)で囲んでおく必要がある。スクリプト 3-5 では、球を作るというコマンドを実行し、その返り値である球の名称を$name という文字列型の配列(複 数の値を入れられる変数)にアサインしている例である。

global proc ex35() { string $name[]; // 配列の定義 $name = `polySphere -r 1`; print $name[0]; // 配列の 0 番目 } スクリプト 3-5: ex35.mel 演習7:スクリプト 3-5 を作成して実行してみなさい。

■ アトリビュート

オブジェクトには多くのアトリビュート(属性)があり、アトリビュート名でそれらの情報を取得し たり(getAttr コマンド)、設定したり(setAttr コマンド)することができる。その他、アトリビュ ートの表示(listAttr)、アトリビュートの接続(connectAttr)と解除(disconnectAttr)などのコ マンドがある。これらの返り値を変数にアサインして利用すると便利である。

global proc ex36() {

float $ty;

polySphere -r 1 -name Ball; // Ball という名称の球を作成

$ty = `getAttr Ball.ty`; // Ball の Y 座標の取得

$ty = $ty + 1.5; // 1.5 を加算

setAttr Ball.ty $ty; // Ball の Y 座標に加算した値を設定

}

スクリプト 3-6: ex36.mel 演習 8:スクリプト 3-6 を作成して実行してみなさい。

global proc ex36(string $name) // 引数として名称を設定

{

float $ty;

polySphere -r 1 -name $name; $ty = `getAttr ($name + ".ty")`; $ty = $ty + 1.5;

setAttr ($name + ".ty") $ty; } スクリプト 3-7: ex36.mel 演習 9:ex36.mel をスクリプト 3-7 のようにオブジェクト名を指定できるように改造してみなさい。 なお、オブジェクト名の後にアトリビュート名を追加する際には、($name + ".ty")のように文字 列として結合し、全体を丸カッコでくくっておかないとエラーになるので注意が必要である。 このプロシージャを呼び出す際には、ex36("Ball"); のように名称を指定して実行すること。

0

1

2

3

変数名:

・・・

(5)

string $str[] = `listAttr`; print $str;

スクリプト 3-8: listAttr.mel

演習 10:オブジェクトを何か選択した状態でスクリプト 3-8 を実行すると、そのオブジェクトで利 用可能なアトリビュートの一覧を表示することができる(下記はそのサンプル)。

translateX rotateX scaleX translateY rotateY scaleY translateZ rotateZ scaleZ

■ ウィンドウ

ウィンドウを生成し、その上に配置したボタンやスライダを用いてオブジェクトのアトリビュートを 制御することができる。ウィンドウを表示するためには、次のコマンドを用いる。そして、これら2 行の間にウィンドウ上のボタンやスライダ等を配置するためのコマンドを記していく。 window -title "表題"; showWindow; ボタンコマンドの書式:

button -label "ラベル" -command "実行するコマンド"; float 型の変数を制御するためのスライダの書式:

floatSliderGrp -label "ラベル" -field true -min 最小値 -max 最大値 -step 増分 -value 初期値 スライダ名;

float 型のスライダの値の取得:

floatSliderGrp -q -value スライダ名;

int 型のスライダの場合には、「intSliderGrp」というコマンドを用いる。 global proc createSphere()

{

float $val;

$val = `floatSliderGrp -q -value radiusSlider`; polySphere;

scale $val $val $val; }

window -title "sample"; columnLayout;

text -label "create sphere";

floatSliderGrp -label "radius" -field true -min 0.1 -max 20.0 -step 0.1

-value 1.0 radiusSlider; button -label "create" -command "createSphere()";

showWindow;

(6)

演習 11:スクリプト 3-9 を実行してみなさい。また他のアトリビュート(移動の XYZ、回転の XYZ、 スケールの XYZ)も変更できるように拡張してみなさい。

スライダの動きによってリアルタイムでオブジェクトのアトリビュートを変化させるためには、 「attrFieldSliderGrp」というコマンドを「-at オブジェクト名.アトリビュート名」を追加して用い る。なお、オブジェクト名を省略すると、現在選択されているオブジェクトが操作対象となる。

window -title "sample"; columnLayout;

text -label "edit XYZ";

attrFieldSliderGrp -label "translate X" -min -10.0 -max 10.0 -at .translateX; showWindow;

スクリプト 3-10: editXYZ.mel

演習 12:オブジェクトをどれか選択し、スクリプト 3-10 を実行してみなさい。また他のアトリビ ュート(移動の XYZ、回転の XYZ、スケールの XYZ)も変更できるように拡張してみなさい。

■ 本日の課題

課題1.MEL スクリプトは CG 制作のどのような場面で使用するのが効果的か。GUI による操作が効 果的な場面と比較しながら、理由も含めてチェックシートに記しなさい。 課題2.選択オブジェクトを原点中心に距離5で Y 軸まわりに r 度回転させるプロシージャを作成し なさい。そして、半径1の球を作成し、そのプロシージャで 120 度回転させるスクリプトを記 しなさい。スクリプトファイル(k03-1.mel)を第3回の課題提出サイトにアップしなさい。 課題3.選択オブジェクトの Y 座標を±10 の範囲でスライダで調整するスクリプトを記しなさい。 スクリプトファイル(k03-2.mel)を第3回の課題提出サイトにアップしなさい。

■ 参考サイト

MEL に関しては次のサイトを参考にすると良い。  http://www.not-enough.org/abe/manual/maya/

参照

関連したドキュメント

  BCI は脳から得られる情報を利用して,思考によりコ

 「訂正発明の上記課題及び解決手段とその効果に照らすと、訂正発明の本

当該不開示について株主の救済手段は差止請求のみにより、効力発生後は無 効の訴えを提起できないとするのは問題があるのではないか

本時は、「どのクラスが一番、テスト前の学習を頑張ったか」という課題を解決する際、その判断の根

であり、最終的にどのような被害に繋がるか(どのようなウイルスに追加で感染させられる

 自然科学の場合、実験や観測などによって「防御帯」の

今回のスマートメーター導入の期待効果の一つには、デマンドレスポンス による

○田中会長 ありがとうございました。..