fix [#35977] Bake Action doesn't work properly
there are cases where you want to use visual-keying but not remove constraints, also it wasnt obvious that clearing constraints used a different method of keyframing. So split these into 2 options.
This commit is contained in:
@@ -31,6 +31,7 @@ def bake_action(frame_start,
|
||||
only_selected=False,
|
||||
do_pose=True,
|
||||
do_object=True,
|
||||
do_visual_keying=True,
|
||||
do_constraint_clear=False,
|
||||
do_parents_clear=False,
|
||||
do_clean=False,
|
||||
@@ -53,7 +54,9 @@ def bake_action(frame_start,
|
||||
:type do_pose: bool
|
||||
:arg do_object: Bake objects.
|
||||
:type do_object: bool
|
||||
:arg do_constraint_clear: Remove constraints (and do 'visual keying').
|
||||
:arg do_visual_keying: Use the final transformations for baking ('visual keying')
|
||||
:type do_visual_keying: bool
|
||||
:arg do_constraint_clear: Remove constraints after baking.
|
||||
:type do_constraint_clear: bool
|
||||
:arg do_parents_clear: Unparent after baking objects.
|
||||
:type do_parents_clear: bool
|
||||
@@ -83,14 +86,14 @@ def bake_action(frame_start,
|
||||
if do_parents_clear:
|
||||
def obj_frame_info(obj, do_visual_keying):
|
||||
parent = obj.parent
|
||||
matrix = obj.matrix_local if do_visual_keying else obj.matrix_basis
|
||||
matrix = obj.matrix_local if do_visual_keying else obj.matrix_local
|
||||
if parent:
|
||||
return parent.matrix_world * matrix
|
||||
else:
|
||||
return matrix.copy()
|
||||
else:
|
||||
def obj_frame_info(obj, do_visual_keying):
|
||||
return obj.matrix_local.copy() if do_visual_keying else obj.matrix_basis.copy()
|
||||
return obj.matrix_local.copy() if do_visual_keying else obj.matrix_local.copy()
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Setup the Context
|
||||
@@ -118,10 +121,11 @@ def bake_action(frame_start,
|
||||
|
||||
for f in frame_range:
|
||||
scene.frame_set(f)
|
||||
scene.update()
|
||||
if do_pose:
|
||||
pose_info.append(pose_frame_info(obj, do_constraint_clear))
|
||||
pose_info.append(pose_frame_info(obj, do_visual_keying))
|
||||
if do_object:
|
||||
obj_info.append(obj_frame_info(obj, do_constraint_clear))
|
||||
obj_info.append(obj_frame_info(obj, do_visual_keying))
|
||||
|
||||
# -------------------------------------------------------------------------
|
||||
# Create action
|
||||
|
@@ -190,6 +190,11 @@ class BakeAction(Operator):
|
||||
description="Only key selected object/bones",
|
||||
default=True,
|
||||
)
|
||||
visual_keying = BoolProperty(
|
||||
name="Visual Keying",
|
||||
description="Keyframe from the final transformations (with constraints applied)",
|
||||
default=False,
|
||||
)
|
||||
clear_constraints = BoolProperty(
|
||||
name="Clear Constraints",
|
||||
description="Remove all constraints from keyed object/bones, and do 'visual' keying",
|
||||
@@ -220,6 +225,7 @@ class BakeAction(Operator):
|
||||
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,
|
||||
|
Reference in New Issue
Block a user