From 781e1f3370d3e1b306132bf9df479d4f9a21960e Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 29 Oct 2013 16:43:56 +0000 Subject: Enable multires bake to level 0 Uses trick with crating simple subdivided mesh with level 1 and bakes against it. From quick tests seems to be working correct, more tests are welcome. --- source/blender/editors/object/object_bake.c | 35 ++++++++++------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 060e48f39bc..55564703a87 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -156,12 +156,6 @@ static bool multiresbake_check(bContext *C, wmOperator *op) break; } - if (mmd->lvl == 0) { - BKE_report(op->reports, RPT_ERROR, "Multires data baking is not supported for preview subdivision level 0"); - ok = false; - break; - } - if (!me->mtpoly) { BKE_report(op->reports, RPT_ERROR, "Mesh should be unwrapped before multires data baking"); @@ -214,28 +208,23 @@ static DerivedMesh *multiresbake_create_loresdm(Scene *scene, Object *ob, int *l DerivedMesh *dm; MultiresModifierData *mmd = get_multires_modifier(scene, ob, 0); Mesh *me = (Mesh *)ob->data; + MultiresModifierData tmp_mmd = *mmd; + DerivedMesh *cddm = CDDM_from_mesh(me, ob); - *lvl = mmd->lvl; - - if (*lvl == 0) { - DerivedMesh *tmp_dm = CDDM_from_mesh(me, ob); - - DM_set_only_copy(tmp_dm, CD_MASK_BAREMESH | CD_MASK_MTFACE); - - dm = CDDM_copy(tmp_dm); - tmp_dm->release(tmp_dm); + if (mmd->lvl > 0) { + *lvl = mmd->lvl; } else { - MultiresModifierData tmp_mmd = *mmd; - DerivedMesh *cddm = CDDM_from_mesh(me, ob); + *lvl = 1; + tmp_mmd.simple = true; + } - DM_set_only_copy(cddm, CD_MASK_BAREMESH | CD_MASK_MTFACE); + DM_set_only_copy(cddm, CD_MASK_BAREMESH | CD_MASK_MTFACE); - tmp_mmd.lvl = *lvl; - tmp_mmd.sculptlvl = *lvl; - dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0); - cddm->release(cddm); - } + tmp_mmd.lvl = *lvl; + tmp_mmd.sculptlvl = *lvl; + dm = multires_make_derived_from_derived(cddm, &tmp_mmd, ob, 0); + cddm->release(cddm); return dm; } -- cgit v1.2.3