[Bf-blender-cvs] [628d799c859] master: Multires: Add utility to create deformed base mesh

Sergey Sharybin noreply at git.blender.org
Tue Mar 17 16:41:55 CET 2020


Commit: 628d799c85965191d5f6231b3433bbae425e59f0
Author: Sergey Sharybin
Date:   Tue Mar 17 15:55:59 2020 +0100
Branches: master
https://developer.blender.org/rB628d799c85965191d5f6231b3433bbae425e59f0

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.

===================================================================

M	source/blender/blenkernel/BKE_multires.h
M	source/blender/blenkernel/intern/multires.c

===================================================================

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;



More information about the Bf-blender-cvs mailing list