体のコントローラの値はすべて同じ値が入っているべきだと思っているので、そうなるようなスクリプトをChatGPTくんに作ってもらいました。 内容としては、 アーマチュア(PoseMode)の選択しているコントローラ(ボーン)のXYZの回転(オイラー)がズレている場合平均値を代入してくれるというものです。 Mayaと違って複数ボーンに同じ値を入れるのが結構めんどい(Alt押しながらEnter)ので。 PoseModeじゃないといけなかったり、選択しているキーフレームを取得するのが難しかったりしたので現在のフレームを対象としています。 import bpy import math # アクティブなオブジェクトを取得 active_object = bpy.context.active_object # オブジェクトが存在し、Poseモードであることを確認 if active_object and active_object.mode == 'POSE': # アクティブなポーズのフレーム番号を取得 frame_current = bpy.context.scene.frame_current # 選択されているボーンのリストを取得 selected_bones = [bone for bone in active_object.pose.bones if bone.bone.select] # ボーンごとの各軸回転の合計を初期化 total_rotation_x = 0.0 total_rotation_y = 0.0 total_rotation_z = 0.0 for bone in selected_bones: # ボーンの各軸回転を取得し合計に加算 total_rotation_x += bone.rotation_euler.x total_rotation_y += bone.rotation_euler.y total_rotation_z += bone.rotation_euler.z # 各軸の回転の平均値を計算 average_r
体のコントローラの値はすべて同じ値が入っているべきだと思っているので、そうなるようなスクリプトをChatGPTくんに作ってもらいました。
内容としては、
アーマチュア(PoseMode)の選択しているコントローラ(ボーン)のXYZの回転(オイラー)がズレている場合平均値を代入してくれるというものです。
Mayaと違って複数ボーンに同じ値を入れるのが結構めんどい(Alt押しながらEnter)ので。
PoseModeじゃないといけなかったり、選択しているキーフレームを取得するのが難しかったりしたので現在のフレームを対象としています。
内容としては、
アーマチュア(PoseMode)の選択しているコントローラ(ボーン)のXYZの回転(オイラー)がズレている場合平均値を代入してくれるというものです。
Mayaと違って複数ボーンに同じ値を入れるのが結構めんどい(Alt押しながらEnter)ので。
PoseModeじゃないといけなかったり、選択しているキーフレームを取得するのが難しかったりしたので現在のフレームを対象としています。
import bpy import math # アクティブなオブジェクトを取得 active_object = bpy.context.active_object # オブジェクトが存在し、Poseモードであることを確認 if active_object and active_object.mode == 'POSE': # アクティブなポーズのフレーム番号を取得 frame_current = bpy.context.scene.frame_current # 選択されているボーンのリストを取得 selected_bones = [bone for bone in active_object.pose.bones if bone.bone.select] # ボーンごとの各軸回転の合計を初期化 total_rotation_x = 0.0 total_rotation_y = 0.0 total_rotation_z = 0.0 for bone in selected_bones: # ボーンの各軸回転を取得し合計に加算 total_rotation_x += bone.rotation_euler.x total_rotation_y += bone.rotation_euler.y total_rotation_z += bone.rotation_euler.z # 各軸の回転の平均値を計算 average_rotation_x = total_rotation_x / len(selected_bones) average_rotation_y = total_rotation_y / len(selected_bones) average_rotation_z = total_rotation_z / len(selected_bones) # 各ボーンの各軸回転に平均値を設定しキーフレームを挿入 for bone in selected_bones: bone.rotation_euler.x = average_rotation_x bone.rotation_euler.y = average_rotation_y bone.rotation_euler.z = average_rotation_z # キーフレームを挿入 bone.keyframe_insert(data_path="rotation_euler", frame=frame_current) # 出力 print(f"Frame {frame_current}, Average Rotations for selected bones (degrees):") print(f" X Rotation: {math.degrees(average_rotation_x)} degrees") print(f" Y Rotation: {math.degrees(average_rotation_y)} degrees") print(f" Z Rotation: {math.degrees(average_rotation_z)} degrees. Keyframes set.") else: print("No active object in Pose Mode or Pose Mode is not active.")
コメント
コメントを投稿