MRが楽しい

MRやVRについて学習したことを書き残す

Blender3.0で利用可能なpythonスクリプトを作る その127(アニメーションのキーフレームの補間タイプを変更する)

本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。

アニメーションのキーフレームの補間タイプを変更する

補間タイプの情報はカーブデータの各キーフレームに保持されています。
保持しているキーフレームから次のキーフレームまでのカーブの補間方法を示します。
docs.blender.org

以下の13種類の補間タイプが指定可能です。

定義 説明
CONSTANT(定数) 補間なし、A の値は B が検出されるまで保持されます。
LINEAR(線形) A と B の間の直線補間。
BEZIER(ベジェ) A と B の間の滑らかな補間。曲線形状を制御します。
SINE(正弦波) 正弦波緩和(最も弱いほぼ直線的なわずかな曲率)。
QUAD 2 次イージング。
CUBIC キュービックイージング。
QUART クォーティックイージング。
QUINT クインティックイージング。
EXPO(指数関数的) 指数緩和。
CIRC(円形) 円形のイージング (最も強く最もダイナミック)。
BACK(戻る) オーバーシュートとセトリングを伴う立方体の緩和。
BOUNCE(バウンス) オブジェクトが衝突したときのように、指数関数的に減衰する放物線バウンス。
ELASTIC(弾性) 弾性バンドのように指数関数的に減衰する正弦波。

各補間タイプの実行例は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

サンプルスクリプト

スクリプトを実行すると指定したアクションの全キーフレームの補間タイプが LINEAR(線形) に変更されます。
・Script_change_keyframe_interpolation.py

# bpyインポート
import bpy

# アニメーションのキーフレームの補間タイプを変更する
def change_keyframe_interpolation(arg_actiondata:bpy.types.Action, arg_interpolationtype:str) -> bool:
    """アニメーションのキーフレームの補間タイプを変更する

    Keyword Arguments:
        arg_actiondata {bpy.types.Action} -- 指定アクションデータ
        arg_interpolationtype {str} -- 指定補間タイプ

    Returns:
        bool -- 実行成否
    """

    # 引数をチェックする  
    if arg_actiondata == None:
        return False

    # アクション内の全アクションカーブを走査する
    for fcurve in arg_actiondata.fcurves:
        # カーブ内の全キーポイントを走査する
        for keyframe_point in fcurve.keyframe_points:
            # キーフレームの補間タイプを変更する
            # Keyframeアクセスのマニュアル
            # (https://docs.blender.org/api/current/bpy.types.Keyframe.html)
            keyframe_point.interpolation = arg_interpolationtype
        # 更新したキーフレームに合わせてカーブを更新する
        fcurve.update()

    return True

# 関数の実行例
actiondata = bpy.data.actions.get('Action')
interpolationtype = 'LINEAR'
change_keyframe_interpolation(
    arg_actiondata=actiondata,
    arg_interpolationtype=interpolationtype)

・実行前

・実行後