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

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

MEL によってキーフレームアニメーションを実行する場合は、以下の手順で作ってゆきます。

  1. currentTime によって、 現在の時間を設定します。
  2. ノードのアトリビュートを変更します。
  3. setKeyframe によって、 キーフレームを設定します。
  4. 上の 1 から 3 を、必要なフレーム数だけ繰り返します。

キーフレームアニメーションは、キーを設定可能なアトリビュートにのみ有効です。
たとえば、トランスフォームノードではデフォールトで 移動 X, 移動 Y, 移動 Z, 回転 X, 回転 Y, 回転 Z, スケール X, スケール Y, スケール Z, 可視性 などがキーを設定可能になっています。
もし、デフォールトでキーを設定できないアトリビュートにキーフレームアニメーションをつけるときは、以下のコマンドによってキーを設定可能にします。
setAttr -k on ノード名.アトリビュート名

GUIでは ウインドウ → 一般エディタ → チャンネル コントロール によって行ないます。

Tips

キーを設定可能な、アトリビュートのリストを調べるためには、以下のコマンドを使用します。

listAttr -k ノード名

アニメーションの例

キーフレームを設定して、球体を円状にアニメーションさせる 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. スクリプト エディタ の ファイル → ソース スクリプト によって circleAnimation1.mel を読み込みます。
  3. スクリプト エディタ のインプットウインドウに 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[];
球体の名前を入れておくための、文字列の配列を宣言しています。
$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