diff --git a/source/blender/editors/object/object_relations.cc b/source/blender/editors/object/object_relations.cc index 559993b2505..18e37a0b007 100644 --- a/source/blender/editors/object/object_relations.cc +++ b/source/blender/editors/object/object_relations.cc @@ -391,7 +391,7 @@ void ED_object_parent_clear(Object *ob, const int type) if (ob->parent == nullptr) { return; } - + unsigned int flags = ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION; switch (type) { case CLEAR_PARENT_ALL: { /* for deformers, remove corresponding modifiers to prevent @@ -409,6 +409,9 @@ void ED_object_parent_clear(Object *ob, const int type) * result as object's local transforms */ ob->parent = nullptr; BKE_object_apply_mat4(ob, ob->object_to_world, true, false); + /* Don't recalculate the animation because it would change the transform + * instead of keeping it. */ + flags &= ~ID_RECALC_ANIMATION; break; } case CLEAR_PARENT_INVERSE: { @@ -422,7 +425,7 @@ void ED_object_parent_clear(Object *ob, const int type) /* Always clear parentinv matrix for sake of consistency, see #41950. */ unit_m4(ob->parentinv); - DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION); + DEG_id_tag_update(&ob->id, flags); } /* NOTE: poll should check for editable scene. */