[Bf-blender-cvs] [ded7af53b4f] master: Fix T74889 Baking to current action doesn't work properly

Sybren A. Stüvel noreply at git.blender.org
Mon Apr 6 13:45:01 CEST 2020


Commit: ded7af53b4f2fed41069dd52a9854fe1e904cad1
Author: Sybren A. Stüvel
Date:   Mon Apr 6 13:37:51 2020 +0200
Branches: master
https://developer.blender.org/rBded7af53b4f2fed41069dd52a9854fe1e904cad1

Fix T74889 Baking to current action doesn't work properly

Before this commit, baking an action would only insert keys that are
necessary (i.e. using `INSERTKEY_NEEDED`). When baking to the current
Action, if there are no constraints that influence the final animation,
there are no additional keys necessary. This makes it appear as if
nothing happened. However, when baking to a new Action every additional
frame is necessary and thus a key is added for every frame.

@mont29 and I agreed that this behaviour is confusing, so this commit
changes the behaviour such that baking to the current action and to a
new action result in the same baked animation (that is, keyed on every
frame).

===================================================================

M	release/scripts/modules/bpy_extras/anim_utils.py

===================================================================

diff --git a/release/scripts/modules/bpy_extras/anim_utils.py b/release/scripts/modules/bpy_extras/anim_utils.py
index c67134ac3f6..7de919f489e 100644
--- a/release/scripts/modules/bpy_extras/anim_utils.py
+++ b/release/scripts/modules/bpy_extras/anim_utils.py
@@ -216,8 +216,6 @@ def bake_action_iter(
     pose_info = []
     obj_info = []
 
-    options = {'INSERTKEY_NEEDED'}
-
     # -------------------------------------------------------------------------
     # Collect transformations
 
@@ -281,7 +279,7 @@ def bake_action_iter(
             for (f, matrix, bbones) in pose_info:
                 pbone.matrix_basis = matrix[name].copy()
 
-                pbone.keyframe_insert("location", index=-1, frame=f, group=name, options=options)
+                pbone.keyframe_insert("location", index=-1, frame=f, group=name)
 
                 rotation_mode = pbone.rotation_mode
                 if rotation_mode == 'QUATERNION':
@@ -293,9 +291,9 @@ def bake_action_iter(
                         del quat
                     else:
                         quat_prev = pbone.rotation_quaternion.copy()
-                    pbone.keyframe_insert("rotation_quaternion", index=-1, frame=f, group=name, options=options)
+                    pbone.keyframe_insert("rotation_quaternion", index=-1, frame=f, group=name)
                 elif rotation_mode == 'AXIS_ANGLE':
-                    pbone.keyframe_insert("rotation_axis_angle", index=-1, frame=f, group=name, options=options)
+                    pbone.keyframe_insert("rotation_axis_angle", index=-1, frame=f, group=name)
                 else:  # euler, XYZ, ZXY etc
                     if euler_prev is not None:
                         euler = pbone.rotation_euler.copy()
@@ -305,9 +303,9 @@ def bake_action_iter(
                         del euler
                     else:
                         euler_prev = pbone.rotation_euler.copy()
-                    pbone.keyframe_insert("rotation_euler", index=-1, frame=f, group=name, options=options)
+                    pbone.keyframe_insert("rotation_euler", index=-1, frame=f, group=name)
 
-                pbone.keyframe_insert("scale", index=-1, frame=f, group=name, options=options)
+                pbone.keyframe_insert("scale", index=-1, frame=f, group=name)
 
                 # Bendy Bones
                 if pbone.bone.bbone_segments > 1:
@@ -315,7 +313,7 @@ def bake_action_iter(
                     for bb_prop in BBONE_PROPS:
                         # update this property with value from bbone_shape, then key it
                         setattr(pbone, bb_prop, bbone_shape[bb_prop])
-                        pbone.keyframe_insert(bb_prop, index=-1, frame=f, group=name, options=options)
+                        pbone.keyframe_insert(bb_prop, index=-1, frame=f, group=name)
 
     # object. TODO. multiple objects
     if do_object:
@@ -331,7 +329,7 @@ def bake_action_iter(
             name = "Action Bake"  # XXX: placeholder
             obj.matrix_basis = matrix
 
-            obj.keyframe_insert("location", index=-1, frame=f, group=name, options=options)
+            obj.keyframe_insert("location", index=-1, frame=f, group=name)
 
             rotation_mode = obj.rotation_mode
             if rotation_mode == 'QUATERNION':
@@ -344,9 +342,9 @@ def bake_action_iter(
                     print ("quat_prev", quat_prev)
                 else:
                     quat_prev = obj.rotation_quaternion.copy()
-                obj.keyframe_insert("rotation_quaternion", index=-1, frame=f, group=name, options=options)
+                obj.keyframe_insert("rotation_quaternion", index=-1, frame=f, group=name)
             elif rotation_mode == 'AXIS_ANGLE':
-                obj.keyframe_insert("rotation_axis_angle", index=-1, frame=f, group=name, options=options)
+                obj.keyframe_insert("rotation_axis_angle", index=-1, frame=f, group=name)
             else:  # euler, XYZ, ZXY etc
                 if euler_prev is not None:
                     euler = obj.rotation_euler.copy()
@@ -356,9 +354,9 @@ def bake_action_iter(
                     del euler
                 else:
                     euler_prev = obj.rotation_euler.copy()
-                obj.keyframe_insert("rotation_euler", index=-1, frame=f, group=name, options=options)
+                obj.keyframe_insert("rotation_euler", index=-1, frame=f, group=name)
 
-            obj.keyframe_insert("scale", index=-1, frame=f, group=name, options=options)
+            obj.keyframe_insert("scale", index=-1, frame=f, group=name)
 
         if do_parents_clear:
             obj.parent = None



More information about the Bf-blender-cvs mailing list