コード例 #1
0
ファイル: anim.py プロジェクト: dfelinto/blender
    def execute(self, context):
        from bpy_extras import anim_utils
        objects = context.selected_editable_objects
        object_action_pairs = (
            [(obj, getattr(obj.animation_data, "action", None)) for obj in objects]
            if self.use_current_action else
            [(obj, None) for obj in objects]
        )

        actions = anim_utils.bake_action_objects(
            object_action_pairs,
            frames=range(self.frame_start, self.frame_end + 1, self.step),
            only_selected=self.only_selected,
            do_pose='POSE' in self.bake_types,
            do_object='OBJECT' in self.bake_types,
            do_visual_keying=self.visual_keying,
            do_constraint_clear=self.clear_constraints,
            do_parents_clear=self.clear_parents,
            do_clean=True,
        )

        if not any(actions):
            self.report({'INFO'}, "Nothing to bake")
            return {'CANCELLED'}

        return {'FINISHED'}
コード例 #2
0
    def execute(self, context):
        from bpy_extras import anim_utils
        objects = context.selected_editable_objects
        object_action_pairs = (
            [(obj, getattr(obj.animation_data, "action", None)) for obj in objects]
            if self.use_current_action else
            [(obj, None) for obj in objects]
        )

        actions = anim_utils.bake_action_objects(
            object_action_pairs,
            frames=range(self.frame_start, self.frame_end + 1, self.step),
            only_selected=self.only_selected,
            do_pose='POSE' in self.bake_types,
            do_object='OBJECT' in self.bake_types,
            do_visual_keying=self.visual_keying,
            do_constraint_clear=self.clear_constraints,
            do_parents_clear=self.clear_parents,
            do_clean=True,
        )

        if not any(actions):
            self.report({'INFO'}, "Nothing to bake")
            return {'CANCELLED'}

        return {'FINISHED'}
コード例 #3
0
    def execute(self, context):

        scn = context.scene

        Global_Settings = scn.GRT_Action_Bakery_Global_Settings
        Action_Bakery = scn.GRT_Action_Bakery

        control_rig = Global_Settings.Source_Armature
        deform_rig = Global_Settings.Target_Armature

        NLA_Strip_Check = []

        CTRL_Save_Use_NLA = None
        DEF_Save_Use_NLA = None

        CTRL_Save_Use_ACTION = None

        if control_rig.animation_data:

            CTRL_Save_Use_NLA = control_rig.animation_data.use_nla
            control_rig.animation_data.use_nla = False
            CTRL_Save_Use_ACTION = control_rig.animation_data.action

        if deform_rig.animation_data:

            DEF_Save_Use_NLA = deform_rig.animation_data.use_nla
            deform_rig.animation_data.use_nla = False

        if control_rig and deform_rig:

            if control_rig.type == "ARMATURE" and deform_rig.type == "ARMATURE":

                Control_Rig_Action_Save = None

                for Baker in Action_Bakery:

                    if control_rig.animation_data:

                        # CTRL_Save_Use_NLA = control_rig.animation_data.use_nla
                        # DEF_Save_Use_NLA = deform_rig.animation_data.use_nla

                        # control_rig.animation_data.use_nla = False
                        # deform_rig.animation_data.use_nla = False

                        # for nla_track in control_rig.animation_data.nla_tracks:
                        #     nla_track.is_solo = False
                        #
                        # if deform_rig.animation_data:
                        #     for nla_track in deform_rig.animation_data.nla_tracks:
                        #         nla_track.is_solo = False

                        if Global_Settings.Pre_Unmute_Constraint:
                            Pose_Bone = deform_rig.pose.bones
                            for bone in Pose_Bone:
                                for constraint in bone.constraints:
                                    constraint.mute = False

                        if Baker.Action:
                            if Baker.Bake_Select:

                                action = Baker.Action

                                # for nla_track in control_rig.animation_data.nla_tracks:
                                #     nla_track.mute = True

                                control_rig.animation_data.action = action

                                if Baker.use_Local_Name:
                                    if Baker.LOCAL_Baked_Name:
                                        action_name = Baker.LOCAL_Baked_Name
                                    else:
                                        action_name = "Baked_" + action.name

                                else:

                                    if Global_Settings.GLOBAL_Baked_Name_Mode == "REPLACE":
                                        action_name = action.name.replace(
                                            Global_Settings.
                                            GLOBAL_Baked_Name_01,
                                            Global_Settings.
                                            GLOBAL_Baked_Name_02)
                                    if Global_Settings.GLOBAL_Baked_Name_Mode == "PREFIX":
                                        action_name = Global_Settings.GLOBAL_Baked_Name_01 + action.name
                                    if Global_Settings.GLOBAL_Baked_Name_Mode == "SUFFIX":
                                        action_name = action.name + Global_Settings.GLOBAL_Baked_Name_01

                                    # else:
                                    #     frame = [i for i in range(int(action.frame_range[0]), int(action.frame_range[1])+1-Global_Settings.GLOBAL_Trim_End_Frame)]

                                if Baker.Frame_Range_Mode == "SET":
                                    start_frame = Baker.Set_FR_Start
                                    end_frame = Baker.Set_FR_End + 1
                                if Baker.Frame_Range_Mode == "ACTION":
                                    start_frame = int(action.frame_range[0])
                                    end_frame = int(action.frame_range[1]) + 1
                                if Baker.Frame_Range_Mode == "TRIM":
                                    start_frame = int(action.frame_range[0]
                                                      ) + Baker.Trim_FR_Start
                                    end_frame = int(action.frame_range[1]
                                                    ) + 1 - Baker.Trim_FR_End

                                frame = [
                                    i for i in range(start_frame, end_frame)
                                ]

                                # if Baker.use_Local_Trim:
                                #     frame = [i for i in range(int(action.frame_range[0]), int(action.frame_range[1])+1-Baker.LOCAL_Trim)]
                                # else:
                                #     frame = [i for i in range(int(action.frame_range[0]), int(action.frame_range[1])+1)]

                                if Global_Settings.Overwrite:
                                    obj_act = [[
                                        deform_rig,
                                        bpy.data.actions.get(action_name)
                                    ]]
                                else:
                                    obj_act = [[deform_rig, None]]

                                # obj_act = [[deform_rig, None]]
                                Baked_Action = anim_utils.bake_action_objects(
                                    obj_act,
                                    frames=frame,
                                    only_selected=Global_Settings.
                                    BAKE_SETTINGS_Only_Selected,
                                    do_pose=Global_Settings.
                                    BAKE_SETTINGS_Do_Pose,
                                    do_object=Global_Settings.
                                    BAKE_SETTINGS_Do_Object,
                                    do_visual_keying=Global_Settings.
                                    BAKE_SETTINGS_Do_Visual_Keying,
                                    do_constraint_clear=Global_Settings.
                                    BAKE_SETTINGS_Do_Constraint_Clear,
                                    do_parents_clear=Global_Settings.
                                    BAKE_SETTINGS_Do_Parent_Clear,
                                    do_clean=Global_Settings.
                                    BAKE_SETTINGS_Do_Clean)

                                # if Global_Settings.Overwrite:
                                #     duplicate_check = bpy.data.actions.get(action_name)
                                #     if duplicate_check:
                                #
                                #
                                #         context.view_layer.update()
                                #         bpy.data.actions.remove(duplicate_check)
                                #         context.view_layer.update()
                                #
                                #         if Global_Settings.Clean_Empty_NLA_Strip:
                                #             for nla_track in deform_rig.animation_data.nla_tracks:
                                #                 for s in nla_track.strips:
                                #                     for strip in nla_track.strips:
                                #                         if strip.action == None:
                                #                             nla_track.strips.remove(strip)
                                #                             break

                                Baked_Action[0].name = action_name

                                if Baker.offset_keyframe_to_frame_one:

                                    start_frame = Baked_Action[0].frame_range[
                                        0]

                                    for fcurve in Baked_Action[0].fcurves:
                                        for kp in fcurve.keyframe_points:
                                            kp.co.x = kp.co.x - start_frame + 1

                                context.view_layer.update()

                                if Global_Settings.Push_to_NLA:
                                    deform_rig.animation_data.nla_tracks.new(
                                    ).strips.new(
                                        Baked_Action[0].name,
                                        Baked_Action[0].frame_range[0],
                                        Baked_Action[0])
                                    # deform_rig.animation_data.nla_tracks.new().strips.new(Baked_Action[0].name, action.frame_range[0], Baked_Action[0])
                                    # deform_rig.animation_data.nla_tracks.new().strips.new(Baked_Action[0].name, 0, Baked_Action[0])

                        # for nla_track_pair in nla_track_state:
                        #     print(nla_track_pair[1])
                        #     nla_track_pair[0].mute = nla_track_pair[1]

                        if Global_Settings.Post_Mute_Constraint:
                            Pose_Bone = deform_rig.pose.bones
                            for bone in Pose_Bone:
                                for constraint in bone.constraints:
                                    constraint.mute = True

                        if control_rig.animation_data:
                            if control_rig.animation_data.action:
                                control_rig.animation_data.action = CTRL_Save_Use_ACTION

                        if deform_rig.animation_data:
                            if deform_rig.animation_data.action:
                                deform_rig.animation_data.action = None

                        # control_rig.animation_data.use_nla = CTRL_Save_Use_NLA
                        # deform_rig.animation_data.use_nla = DEF_Save_Use_NLA

                        bpy.ops.object.mode_set(mode='OBJECT')
                        bpy.ops.object.select_all(action='DESELECT')
                        deform_rig.select_set(True)
                        context.view_layer.objects.active = deform_rig

        if control_rig.animation_data:

            if CTRL_Save_Use_NLA is not None:
                control_rig.animation_data.use_nla = CTRL_Save_Use_NLA

        if deform_rig.animation_data:

            if DEF_Save_Use_NLA is not None:
                deform_rig.animation_data.use_nla = DEF_Save_Use_NLA

        return {'FINISHED'}