キーフレームアニメーション

キーフレームアニメーションの手順

MELによるキーフレームアニメーションは以下の手順で作ってゆく。

  1. オブジェクトを作っておく。
  2. currentTime で現在の時間を設定する。
  3. オブジェクトのアトリビュートを変更する。
  4. setKeyframe でキーフレームを設定する。
  5. 上の2から4を必要なフレーム数だけ繰り返してアニメーションを作る。

キーフレームアニメーションはキーを設定可能なアトリビュートにのみ有効である。
デフォールトではトランスフォームノードのtranslateX, translateY, translateZ, rotateX, rotateY, rotateZ, scaleX, scaleY, scaleZ, visibility 、コントロールポイントの xValue, yValue, zValue などがキーを設定可能になっている。
もし、デフォールトでキーを設定できないアトリビュートにキーフレームアニメーションをつけるときは
setAttr -k on オブジェクト名.アトリビュート名
によってキーを設定可能にする。
(GUIでは Window → General Editors → Channel Control によって行なう)

アニメーションの例

球を円状にアニメーションさせるMELスクリプト。

  1. 以下のMELスクリプトをcircleAnimation1.melという名前で作る。
    global proc circleAnimation1(float $rad, int $frame)
    {
    	int $i;
    	float $r = 0.0;
    	string $name[];
    
    	$name = `sphere`;
    	setAttr ($name[0] + ".tx") $rad;
    	setAttr ($name[0] + ".rotatePivotX") (-$rad);
    	for($i = 0; $i < $frame;  $i++)
    	{
    		currentTime $i;
    		setAttr ($name[0] + ".ry") $r;
    		setKeyframe -at "ry" $name[0];
    		$r += 10.0;
    	}
    }
    
  2. Script Editorの File → Source Script によってcircleAnimation1.melを読み込む。
  3. Script EditorからcircleAnimation1(5, 100)と打ち込んで実行する。
  4. 半径5の円上を球が動いてゆく100フレーム分のキーフレームアニメーションが作られる。
    circleAnimation(5, 100)の実行結果

スクリプトの解説

global proc circleAnimation1(float $rad, int $frame)
引数として$rad(円の半径の値)と$frame(キーフレーム数)をとるプロシージャー。
int $i;
for文のカウンタとして使うための変数の宣言。
float $r = 0.0;
球の回転角度を入れておく変数の宣言。
string $name[];
球の名前を入れておくためのstring(文字列)の配列を宣言。
$name = `sphere`;
NURBSの球を作成し、その球の名前を配列$nameに代入する。
球の名前を$nameに代入するためにアサインを使用している。
この時、配列$nameには以下のように代入される。
setAttr ($name[0] + ".tx") $rad;
$name[0](球のトランスフォームノード)のアトリビュート(tx)に$radをセットする。
setAttr ($name[0] + ".rotatePivotX") (-$rad);
$name[0](球のトランスフォームノード)のアトリビュート(rotatePivotX)に-$radをセットする。
球の回転の中心をY軸上にしておくために実行しておく。
for($i = 0; $i < $frame; $i++)
$frameforループを実行する。
以下はforループ内の処理の解説。
currentTime $i;
現在のフレームを$iにセットする。
setAttr ($name[0] + ".ry") $r;
$name[0](球のトランスフォームノード)のアトリビュート(ry)に$rをセットする。
球がY軸周りに$rだけ回転する。
回転の中心は(0, 0, 0)である。
setKeyframe -at "ry" $name[0];
球のトランスフォームノード($name[0])のアトリビュート(ry)にキーフレームを設定する。
ここではキーを設定するアトリビュートは1つだけだが、 2つ以上のアトリビュートを設定する場合は -at "アトリビュート名" を必要なだけ記述してゆく。
もし-atによってアトリビュート名を指定しないと指定されたオブジェクトの全てのアトリビュートにキーが設定される。
また、もしキーを設定するオブジェクト(ここでは$name[0])が無いとセレクトされているオブジェクトのアトリビュートにキーが設定される。
$r += 10.0;
球の回転角度($r)に10.0を加える。

練習

まとめ

練習課題

参考


Prev | Next
Home | Contents
Mail