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.
This commit is contained in:
Sergey Sharybin
2020-03-17 15:55:59 +01:00
parent c76d390c92
commit 628d799c85
2 changed files with 28 additions and 0 deletions

View File

@@ -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,

View File

@@ -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;