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

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

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

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

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

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

Tips

アトリビュートが、キーを設定可能なのかどうかを調べるためには以下のメソッドを使用します。

ノード名.アトリビュート名.isKeyable()

アニメーションの例

キーフレームを設定して、球体を円状にアニメーションさせる Python スクリプトを作ってみましょう。

  1. 以下の Python スクリプトを circleAnimation1.py という名前で作ります。
    import pymel.core as pm
    
    def circleAnimation1(rad, frame):
        r = 0.0
        name = pm.sphere()
        name[0].tx.set(rad)
        name[0].rotatePivotX.set(-rad)
        for i in range(frame):
            pm.currentTime(i)
            name[0].ry.set(r)
            pm.setKeyframe(name[0], at='ry')
            r += 10.0
    
  2. スクリプト エディタ の ファイル → スクリプトのロード によって circleAnimation1.py を読み込んで、テンキーの Enter キーなどで実行します。
  3. スクリプト エディタ のインプットウインドウに circleAnimation1(5, 100) と打ち込んで実行します。
  4. 半径 5 の円上を球が動いてゆく 100 フレーム分のキーフレームアニメーションが作られます。
    circleAnimation(5, 100)の実行結果

スクリプトの解説

import pymel.core as pm
pymel.core モジュールをインポートしてpmという名前で使用できるようにします。
def circleAnimation1(rad, frame):
引数として rad (円の半径の値)と frame (キーフレーム数)をとる関数の宣言です。
r = 0.0
球体の回転角度を入れておく変数に初期値 0.0 を代入しておきます。
name = pm.sphere()
変数に球体の名前を代入しておきます。
name[0] にトランスフォームノードの名前、 name[1] にインプットノードの名前が入ります。
name[0].tx.set(rad)
name[0] (球体のトランスフォームノード)のアトリビュート(tx)に rad を設定します。
name[0].rotatePivotX.set(-rad)
name[0] (球のトランスフォームノード)のアトリビュート(rotatePivotX)に -rad を設定します。
球体の回転の中心を Y 軸上にしておくために実行しておきます。
for i in range(frame):
framefor ループを実行します。
以下は for ループ内の処理の解説です。
pm.currentTime(i)
現在のフレームを i に設定します。
name[0].ry.set(r)
name[0] (球のトランスフォームノード)のアトリビュート(ry)に r の値を設定します。
その結果、球が Y 軸周りに r だけ回転します。
回転の中心は(0, 0, 0)です。
pm.setKeyframe(name[0], at='ry')
球のトランスフォームノード(name[0])のアトリビュート(ry)にキーフレームを設定します。
ここではキーを設定するアトリビュートは 1 つだけですが、 2 つ以上のアトリビュートを設定する場合は
at=('アトリビュート名1', 'アトリビュート名2', ...)
などのように、タプルの中にアトリビュート名を必要なだけ記述してゆきます。
もし at によってアトリビュート名を指定しないと、 指定されたノードの全てのアトリビュートにキーが設定されます。
また、もしキーを設定するノード(ここではname[0])が無いとセレクトされているノードのアトリビュートにキーが設定されます。
r += 10.0
球の回転角度(r)に10.0を加えます。

練習

まとめ

参考


Prev | Next
Home | Contents
Mail