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).
This commit is contained in:
parent
c03e5e7830
commit
ded7af53b4
Notes:
blender-bot
2023-02-14 11:24:03 +01:00
Referenced by issue #74889, Baking to current action doesn't work properly
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue