diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c index 6164958bf2c..bed0be67494 100644 --- a/source/blender/editors/object/object_bake_api.c +++ b/source/blender/editors/object/object_bake_api.c @@ -754,6 +754,7 @@ static int bake(Render *re, Object *ob_cage = NULL; Object *ob_cage_eval = NULL; Object *ob_low_eval = NULL; + Object *ob_cage_internal = NULL; BakeHighPolyData *highpoly = NULL; int tot_highpoly = 0; @@ -927,7 +928,8 @@ static int bake(Render *re, } } else if (is_cage) { - BKE_object_eval_reset(ob_low_eval); + ob_cage_internal = BKE_object_copy(bmain, ob_low_eval); + ob_cage_internal->runtime.object_as_temp_mesh = NULL; ModifierData *md = ob_low_eval->modifiers.first; while (md) { @@ -940,13 +942,13 @@ static int bake(Render *re, * the eventual edge split.*/ if (md->type == eModifierType_EdgeSplit) { - BLI_remlink(&ob_low_eval->modifiers, md); + BLI_remlink(&ob_cage_internal->modifiers, md); modifier_free(md); } md = md_next; } - me_cage = BKE_object_to_mesh(NULL, ob_low_eval, false); + me_cage = BKE_object_to_mesh(NULL, ob_cage_internal, false); RE_bake_pixels_populate(me_cage, pixel_array_low, num_pixels, &bake_images, uv_layer); } @@ -1260,6 +1262,10 @@ cleanup: BKE_object_to_mesh_clear(ob_cage_eval); } + if (ob_cage_internal) { + BKE_object_free(ob_cage_internal); + } + DEG_graph_free(depsgraph); return op_result;