本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
アクションデータ内から指定ボーンポーズのデータを削除する
アクションデータにはアクションの動きを示すカーブデータが含まれています。
カーブデータはデータパス名とインデックスごとに保持されています。
docs.blender.org
ポーズモードで設定したボーンのデータパス名は pose.bones["(ボーン名)"].*** となっているので、これに一致するデータパスを削除します。
文字列の前方一致には startsswith() 関数が利用できます。
note.nkmk.me
サンプルスクリプト
スクリプトを実行すると指定したアクション内に含まれる指定ボーンポーズのデータが削除されます。
・Script_delete_action_datapath_byBone.py
# bpyインポート import bpy # 指定アクションに含まれる指定ボーンポーズ関連のデータパスを削除する def delete_action_datapath_byBone(arg_actiondata:bpy.types.Action, arg_bonename:str) -> bool: """# 指定アクションに含まれる指定ボーンポーズ関連のデータパスを削除する Keyword Arguments: arg_actiondata {bpy.types.Action} -- 指定アクションデータ arg_bonename {str} -- 指定ボーン名 Returns: bool -- 実行成否 """ # 引数をチェックする if arg_actiondata == None: return False if arg_bonename == None: return False # ボーンポーズのデータパス名を作成する target_datapath_name = 'pose.bones["' + arg_bonename + '"].' # アクション内の全アクションカーブを走査する # データ削除のため、リストは逆順(reversed)で回す for fcurve in reversed(arg_actiondata.fcurves): # アクションカーブのデータパス名がボーン名と前方一致するか # Fcurveアクセスのマニュアル # (https://docs.blender.org/api/current/bpy.types.FCurve.html) if fcurve.data_path.startswith(target_datapath_name): # 対象ボーンのアクションカーブであれば削除する arg_actiondata.fcurves.remove(fcurve) return True # 関数の実行例 delete_action_datapath_byBone( arg_actiondata=bpy.data.actions.get("Action_Wait"), arg_bonename="control.ChinIK")
・実行前
・実行後