Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2020-04-24 11:40:42 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2020-04-24 11:40:42 +0300
commited32afd9620cdc86c1f03b5b9ed38ed9a6fb64ea (patch)
tree8eca08284b0ee02c93d2c6fb2e4beeb44a2531bc /source/blender/blenkernel
parent0de591ac39fc90f3ea234b9bfc86af9dfb0ace22 (diff)
parent4542b50afcfc9b797d5f3048393ba1f1836561a0 (diff)
Merge branch 'blender-v2.83-release'
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/multires_reshape.c8
-rw-r--r--source/blender/blenkernel/intern/multires_reshape.h1
-rw-r--r--source/blender/blenkernel/intern/multires_reshape_util.c7
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);