エクスプレッション

エクスプレッション によるアニメーション

エクスプレッションの機能を使用すると、各オブジェクトのアトリビュートを数式・プロシージャなどでアニメーションさせることができる。
エクスプレッションを定義・編集するにはExpression Editorを使用することが多いが ここではMELのコマンド(expression)を使用して実行する方法を紹介する。

expressionコマンド

expressionコマンドでは-stringの後にエクスプレッションを 定義するが、その中には単なる数式だけでなく変数を使用やif, while, for, switchなどの制御構造も使用できるのでプログラムで表現できることなら、どんな複雑なアニメーションでも定義できる。

expressionの変数

エクスプレッションでは以下の変数を使用して式・プロシージャを作ってゆく。
これらの変数をエクスプレッションで使用する時は、他のMEL変数のように$をつける必要は無い。

frame
現在のフレーム数
time
現在の時間。
現在の設定では1秒あたり30フレーム(NTSC)になっているので 1フレームで1/30 = 0.033秒時間が進む。

expressionコマンドのオプション

-string "文字列"
エクスプレッションの式・プロシージャなどを定義する"文字列"を指定する。
-name string
stringを、このエクスプレッションの名前にする。
-object string
stringを、このエクスプレッションで使うオブジェクトの名前にする。
このオプションで指定された名前はエクスプレッションの中で省略できる。
-query
-string-nameと共に使用して、それらの値を表示する。
-edit
-string-nameと共に使用して、それらの値を変更する。

expressionコマンドの使用例1

  1. Script Editor を表示しておく。
    以下のコマンドはScript Editor から実行する。
  2. 適当な名前で球を1個作る。
    sphere -n sphere1;
  3. エクスプレッションをexpressionコマンドで定義する。
    以下のコマンドはsphere1のアトリビュートの値translateXをsin関数で変化させる。
    expression -string "sphere1.tx = sin(time);";
    このコマンドを実行してScript Editorに表示されるexpresson1が、このエクスプレッションの名前になる。
  4. この後、アニメーションを実行すると球がX軸方向に振動する。
  5. 上のエクスプレッションではアニメーションさせても動きが良く分からないので、エクスプレッションの定義を変更してみよう。
    そのためには-editを使用して以下のようにコマンドを実行する。
    (コマンドの最期のexpression1はこのエクスプレッションの名前である。)
    expression -edit -string "sphere1.tx = 5 * sin(time);" expression1;

expressionコマンドの使用例2

  1. 以下のプロシージャをmakeExpression1.melと言う名前でファイルに書き込む。
    global proc makeExpression1(int $num)
    {
    	for($i = 0; $i < $num; $i++)
    	{
    		$name = `cone`;
    		move ($i * 2) 0 0;
    		$val = $i * 0.3;
    		expression -object $name[0] -string  ("sy = 3 * sin(time + " + $val + ");");
    	}
    }
    
  2. File -> Source Script でmakeExpression1.melを読み込む。
  3. Script Editor で以下のコマンドを実行してみる。
    makeExpression1(10);
    コ−ンが10個現れて、それぞれにエクスプレッションがつけられている。
    アニメーションのレンダリング例

上のスクリプトでexpressionコマンドにおける-stringの部分がどのように実行されるか以下に解説しておく。

  1. ("sy = 3 * sin(time + " + $val + ");")の外側の括弧内は3つの部分に分かれる。
  2. まづ、$valの部分が $val = $i * 0.3;で計算された値に置き換えられる。
  3. それから上の3つの部分が+ (文字列を結合する演算子)によってひとつの文字列になり、 エクスプレッションの式として、 $name[0]で表されるオブジェクト(cone)に割り当てられる。

参考


Prev | Next
Home | Contents
abe@injapan.net