MayaScripts_AlignKeyTangents : ループアニメーション作成補助ツール
ここしばらくはSoftimageについて記事を書いていましたが・・・Mayaに戻ります。
今日はMayaのアニメーション作業時・・・なかでもループアニメーションを作成しているときの煩わしい「ループの前後端の値を合わせる」作業を解消するものをこさえましたので、ご報告です。
AlignKeyTangents
多くの場合、下図のようにループアニメーションの 最初と最後のキーフレームは全く同じ値 にするかと思います。
私は今までの経験上、そのような仕様で作業することが多かったです。 最終的なアニメーションの繋がりを確認する為にも、その方が都合がよいのでしょう。
ただ、面倒なのが 同じポーズをいちいち前後に正しく配置すること!
キーフレームを丸々掴んでコピーしてから、カーソルを反対の端のフレームにペーストみたいなことをしていました。今までは!
これからは違います。
これを使えば一気にその作業が楽になります。
なにができる?
- アニメーションカーブ上の端のキーを反対側の端のキーにペーストできる
- コピーペーストされるのは、キーの値とキースロープの角度 です
- 前方のキーを選択して実行すれば後方のキーへ、後方を選択していれば前方にペーストします。
ダウンロード
ファイルにするのが面倒だったので、各々以下のソースコードをコピペして使ってくだしあ。
適当なショートカットに登録して、素早く実行できるようにしておくと良いです。
そもそもこのスクリプトは、ループの前後のポーズを編集しながら、逐次実行する想定です。
# coding:utf-8 import pymel.core as pm def main(): # Get anim curve names selection = pm.keyframe(q = 1, sl = 1, n = 1) for animCurve in [pm.nodetypes.AnimCurve(i) for i in selection]: # Get about key index selectedTime = pm.keyframe(animCurve, q = 1, sl = 1, tc = 1)[0] timeRange = pm.keyframe(animCurve, q = 1, tc = 1) # Get keyTangent values keyValue = pm.keyframe(animCurve, q = 1, t = selectedTime, vc = 1)[0] angleIn = pm.keyTangent(animCurve, q = 1, t = selectedTime, ia = 1)[0] angleOut = pm.keyTangent(animCurve, q = 1, t = selectedTime, oa = 1)[0] # Decide key index keyIndex = -1 * (len(timeRange)/2 >= timeRange.index(selectedTime)) # Align keyTangent slope angle pm.keyframe(animCurve, t = timeRange[keyIndex], vc = keyValue) pm.keyTangent(animCurve, t = timeRange[keyIndex], ia = angleIn) pm.keyTangent(animCurve, t = timeRange[keyIndex], ia = angleOut)
使い方
- コピーしたいキーを選択する。
- スクリプトを実行する。
- 以上!
ソースを見れば分かると思いますが、大変簡素なコードになっております。
でも、個人的にはこれでループアニメーションの作成が15%は楽になりました。多分そんな気がします。
今回は短いですが、この辺で。