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
path: root/source
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2020-03-17 17:55:59 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2020-03-17 18:41:43 +0300
commit628d799c85965191d5f6231b3433bbae425e59f0 (patch)
tree6abd0268128fc6a21402a7ec86fdf2a2e84bdcf8 /source
parentc76d390c921de4988a48a6d143a2ef08f2165a88 (diff)
Multires: Add utility to create deformed base mesh
The new function will use original object as a starting point and apply all enabled deformation modifiers prior to the multires.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/BKE_multires.h9
-rw-r--r--source/blender/blenkernel/intern/multires.c19
2 files changed, 28 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index 3ea5986a0ae..cccb5547603 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -90,9 +90,18 @@ int multires_get_level(const struct Scene *scene,
const struct MultiresModifierData *mmd,
bool render,
bool ignore_simplify);
+
+/* Creates mesh with multires modifier applied on current object's deform mesh. */
struct Mesh *BKE_multires_create_mesh(struct Depsgraph *depsgraph,
struct Object *object,
struct MultiresModifierData *mmd);
+
+/* Creates mesh with all deform modifiers leading the multires one applied.
+ * NOTE: The modifiers will be re-evaluated. */
+struct Mesh *BKE_multires_create_deformed_base_mesh(struct Depsgraph *depsgraph,
+ struct Object *object,
+ struct MultiresModifierData *mmd);
+
void multiresModifier_del_levels(struct MultiresModifierData *mmd,
struct Scene *scene,
struct Object *object,
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index b8464bf02c0..fd91f80b047 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -293,6 +293,25 @@ Mesh *BKE_multires_create_mesh(struct Depsgraph *depsgraph,
return result;
}
+Mesh *BKE_multires_create_deformed_base_mesh(struct Depsgraph *depsgraph,
+ Object *object,
+ MultiresModifierData *mmd)
+{
+ Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
+ Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
+
+ const int mmd_index = BLI_findindex(&object->modifiers, &mmd->modifier);
+ BLI_assert(mmd_index != -1);
+
+ Object object_for_eval = *object_eval;
+ object_for_eval.data = object->data;
+
+ Mesh *base_mesh = mesh_create_eval_final_view_index(
+ depsgraph, scene_eval, object, &CD_MASK_BAREMESH, mmd_index - 1);
+
+ return base_mesh;
+}
+
MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData *lastmd)
{
ModifierData *md;