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.
This commit is contained in:
Sergey Sharybin 2013-10-29 16:43:56 +00:00
parent 7bc61927ab
commit 781e1f3370

@ -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,29 +208,24 @@ 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);
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);
*lvl = 1;
tmp_mmd.simple = true;
}
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);
return dm;
}