本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
指定ボーンのポーズ情報を参照する
ボーンのポーズ情報は bpy.types.Bone データからは参照できません。
アーマチュアオブジェクトに含まれる pose 変数から bpy.types.PoseBone データを参照する必要があります。
docs.blender.org
docs.blender.org
docs.blender.org
サンプルスクリプト
アーマチュアオブジェクトとボーン名を指定すると、指定のポーズボーンデータの参照を取得できます。
・Script_sow_bone_target_posebone.py
# bpyインポート import bpy # アーマチュア内の指定ボーンのポーズボーン情報を参照する def select_posebone_target(arg_targetobject:bpy.types.Object, arg_bonename:str) -> bpy.types.PoseBone: """アーマチュア内の指定ボーンのポーズボーン情報を参照する Keyword Arguments: arg_targetobject {bpy.types.Object} -- 対象オブジェクト arg_bonename {str} -- 対象ボーン名 Returns: bpy.types.PoseBone -- ポーズボーン情報 """ # 指定オブジェクトがアーマチュアか確認する # オブジェクトタイプの一覧 # (https://docs.blender.org/api/current/bpy.types.Object.html#bpy.types.Object.type) if arg_targetobject.type != 'ARMATURE': # アーマチュアでない場合はボーンを取得しない return None # アーマチュア内のポーズデータの指定ボーンを取得する target_posebone = arg_targetobject.pose.bones.get(arg_bonename) if target_posebone == None: # ボーンを取得できない場合は処理を終了する return None return target_posebone # 関数の実行例 # 指定アーマチュア内の指定ボーンを参照する get_posebone = select_posebone_target( arg_targetobject=bpy.data.objects.get("metarig"), arg_bonename="control.BodyIK") # 取得したボーン名を表示する # ポーズボーン操作のマニュアル # (https://docs.blender.org/api/3.0/bpy.types.PoseBone.html) print(f"Bone : name = {get_posebone.name} , length = {get_posebone.length:.05f}") # ポーズデータの座標と回転を参照する print("PoseBone location : " + f"{get_posebone.location[0]:.05f} ," + f"{get_posebone.location[1]:.05f} ," + f"{get_posebone.location[2]:.05f}") print("PoseBone rotation_quaternion : " + f"{get_posebone.rotation_quaternion[0]:.05f} ," + f"{get_posebone.rotation_quaternion[1]:.05f} ," + f"{get_posebone.rotation_quaternion[2]:.05f} ," + f"{get_posebone.rotation_quaternion[3]:.05f}")