diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-04-24 11:40:42 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2020-04-24 11:40:42 +0300 |
commit | ed32afd9620cdc86c1f03b5b9ed38ed9a6fb64ea (patch) | |
tree | 8eca08284b0ee02c93d2c6fb2e4beeb44a2531bc /source/blender/blenkernel | |
parent | 0de591ac39fc90f3ea234b9bfc86af9dfb0ace22 (diff) | |
parent | 4542b50afcfc9b797d5f3048393ba1f1836561a0 (diff) |
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/intern/multires_reshape.c | 8 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires_reshape.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/multires_reshape_util.c | 7 |
3 files changed, 13 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/multires_reshape.c b/source/blender/blenkernel/intern/multires_reshape.c index 8674f5d2dbf..02cd5f094a6 100644 --- a/source/blender/blenkernel/intern/multires_reshape.c +++ b/source/blender/blenkernel/intern/multires_reshape.c @@ -202,7 +202,13 @@ void multiresModifier_subdivide_to_level(struct Object *object, multires_reshape_store_original_grids(&reshape_context); multires_reshape_ensure_grids(coarse_mesh, reshape_context.top.level); multires_reshape_assign_final_coords_from_orig_mdisps(&reshape_context); - multires_reshape_smooth_object_grids(&reshape_context); + + /* Free original grids which makes it so smoothing with details thinks all the details were + * added against base mesh's limit surface. This is similar behavior to as if we've done all + * displacement in sculpt mode at the old top level and then propagated to the new top level. */ + multires_reshape_free_original_grids(&reshape_context); + + multires_reshape_smooth_object_grids_with_details(&reshape_context); multires_reshape_object_grids_to_tangent_displacement(&reshape_context); multires_reshape_context_free(&reshape_context); diff --git a/source/blender/blenkernel/intern/multires_reshape.h b/source/blender/blenkernel/intern/multires_reshape.h index 79d3c48869f..adfa2659661 100644 --- a/source/blender/blenkernel/intern/multires_reshape.h +++ b/source/blender/blenkernel/intern/multires_reshape.h @@ -166,6 +166,7 @@ bool multires_reshape_context_create_from_subdivide(MultiresReshapeContext *resh struct MultiresModifierData *mmd, int top_level); +void multires_reshape_free_original_grids(MultiresReshapeContext *reshape_context); void multires_reshape_context_free(MultiresReshapeContext *reshape_context); /* ================================================================================================ diff --git a/source/blender/blenkernel/intern/multires_reshape_util.c b/source/blender/blenkernel/intern/multires_reshape_util.c index 5b6e211cc9b..57d790d2c34 100644 --- a/source/blender/blenkernel/intern/multires_reshape_util.c +++ b/source/blender/blenkernel/intern/multires_reshape_util.c @@ -236,7 +236,7 @@ bool multires_reshape_context_create_from_subdivide(MultiresReshapeContext *resh return context_verify_or_free(reshape_context); } -static void free_original_grids(MultiresReshapeContext *reshape_context) +void multires_reshape_free_original_grids(MultiresReshapeContext *reshape_context) { MDisps *orig_mdisps = reshape_context->orig.mdisps; GridPaintMask *orig_grid_paint_masks = reshape_context->orig.grid_paint_masks; @@ -259,6 +259,9 @@ static void free_original_grids(MultiresReshapeContext *reshape_context) MEM_SAFE_FREE(orig_mdisps); MEM_SAFE_FREE(orig_grid_paint_masks); + + reshape_context->orig.mdisps = NULL; + reshape_context->orig.grid_paint_masks = NULL; } void multires_reshape_context_free(MultiresReshapeContext *reshape_context) @@ -267,7 +270,7 @@ void multires_reshape_context_free(MultiresReshapeContext *reshape_context) BKE_subdiv_free(reshape_context->subdiv); } - free_original_grids(reshape_context); + multires_reshape_free_original_grids(reshape_context); MEM_freeN(reshape_context->face_start_grid_index); MEM_freeN(reshape_context->ptex_start_grid_index); |