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

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

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. Script Editor の ファイル → ソース スクリプト によって 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
Home | Contents
Mail