エクスプレッション
エクスプレッション によるアニメーション
エクスプレッションの機能を使用すると、各オブジェクトのアトリビュートを数式・プロシージャなどでアニメーションさせることができる。
エクスプレッションを定義・編集するにはExpression Editorを使用することが多いが
ここではMELのコマンド(expression)を使用して実行する方法を紹介する。
expressionコマンド
expressionコマンドでは-stringの後にエクスプレッションを
定義するが、その中には単なる数式だけでなく変数を使用やif, while, for, switchなどの制御構造も使用できるのでプログラムで表現できることなら、どんな複雑なアニメーションでも定義できる。
expressionの変数
エクスプレッションでは以下の変数を使用して式・プロシージャを作ってゆく。
これらの変数をエクスプレッションで使用する時は、他のMEL変数のように$をつける必要は無い。
- frame
- 現在のフレーム数
- time
- 現在の時間。
現在の設定では1秒あたり30フレームになっているので 1フレームで1/30 = 0.033秒時間が進む。
expressionコマンドのオプション
- -string "文字列"
- エクスプレッションの式・プロシージャなどを定義する"文字列"を指定する。
- -name string
- stringを、このエクスプレッションの名前にする。
- -object string
- stringを、このエクスプレッションで使うオブジェクトの名前にする。
このオプションで指定された名前はエクスプレッションの中で省略できる。
- -query
- -stringや-nameと共に使用して、それらの値を表示する。
- -edit
- -stringや-nameと共に使用して、それらの値を変更する。
expressionコマンドの使用例1
- Script Editor を表示しておく。
以下のコマンドはScript Editor から実行する。
- 適当な名前で球を1個作る。
sphere -n sphere1;
- エクスプレッションをexpressionコマンドで定義する。
以下のコマンドはsphere1のアトリビュートの値translateXをsin関数で変化させる。
expression -string "sphere1.tx = sin(time);";
このコマンドを実行してScript Editorに表示されるexpresson1が、このエクスプレッションの名前になる。
- この後、アニメーションを実行すると球がX軸方向に振動する。
- 上のエクスプレッションではアニメーションさせても動きが良く分からないので、エクスプレッションの定義を変更してみよう。
そのためには-editを使用して以下のようにコマンドを実行する。
(コマンドの最期のexpression1はこのエクスプレッションの名前である。)
expression -edit -string "sphere1.tx = 5 * sin(time);" expression1;
expressionコマンドの使用例2
- 以下のプロシージャをmakeExpression.melと言う名前でファイルに書き込む。
global Proc makeExpression(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 + ")");
}
}
- File -> Source Script でmakeExpression.melを読み込む。
- Script Editor で以下のコマンドを実行してみる。
makeExpression(10);
レンダリング結果の例
練習
- 上の使用例1のエクスプレッションを30フレーム目で動きが停止するようにしてみよう。
(ヒント)
そのためにはエクスプレッションの中でifを使う。
参考
- オンラインドキュメント (英語)
/usr/aw/maya/docs/en_US/html/Commands/CommandsTOC.doc.html
- リファレンス
Prev | Next
Home | Contents
abe@injapan.net