キーフレームアニメーション
キーフレームアニメーションの手順
Python によってキーフレームアニメーションを実行する場合は、以下の手順で作ってゆきます。
- pm.currentTime() で現在の時間を設定します。
- ノードのアトリビュートを変更します。
- pm.setKeyframe() でキーフレームを設定します。
- 上の1から3を必要なフレーム数だけ繰り返します。
キーフレームアニメーションはキーを設定可能なアトリビュートにのみ有効です。
例えば、トランスフォームノードではデフォールトで 移動 X, 移動 Y, 移動 Z, 回転 X, 回転 Y, 回転 Z, スケール X, スケール Y, スケール Z, 可視性 などがキーを設定可能になっています。
もし、デフォールトでキーを設定できないアトリビュートにキーフレームアニメーションをつけるときは、以下のコマンドによってキーを設定可能にします。
ノード名.アトリビュート名.set(k=True)
GUIでは によって行ないます。
Tips
アトリビュートが、キーを設定可能なのかどうかを調べるためには以下のメソッドを使用します。
ノード名.アトリビュート名.isKeyable()
アニメーションの例
キーフレームを設定して、球体を円状にアニメーションさせる Python スクリプトを作ってみましょう。
- 以下の 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
- スクリプト エディタ の によって circleAnimation1.py を読み込んで、テンキーの Enter キーなどで実行します。
- スクリプト エディタ のインプットウインドウに circleAnimation1(5, 100) と打ち込んで実行します。
- 半径 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):
- frame 回 for ループを実行します。
以下は 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を加えます。
練習
- 上の circleAnimation1.py を参考にして circleAnimation2.py を作り、
1 フレームごとの 回転 Y の値を引数で変えることができるようにしてみましょう。
def circleAnimation2(rad, frame, ir):
- rad
- 円の半径
- frame
- 総フレーム数
- ir
- 1フレームごとの 回転Y の値
- 上の circleAnimation2.py を参考にして螺旋状に球が動くcircleAnimation3.py を作ってみましょう。
def circleAnimation3(rad, frame, ir, iy):
- rad
- frame
- ir
- circleAnimation2 と同じ
- iy
- 1フレームごとの 移動 Y の増減値
circleAnimation3(5, 100, 10, 0.1)の結果
まとめ
- PyMEL によるキーフレームアニメーションでは
pm.currentTime() で時間の設定、
pm.setKeyframe() でキーフレームの設定を行います。
参考
Prev | Next
Home | Contents
Mail