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
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-10-29 20:43:56 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-10-29 20:43:56 +0400
commit781e1f3370d3e1b306132bf9df479d4f9a21960e (patch)
tree4f4b76588a3fe96dbe02e435df862b6d52b259e5
parent7bc61927ab81bd95a1bbecb989f3e828738260f5 (diff)
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.
-rw-r--r--source/blender/editors/object/object_bake.c35
1 files 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;
}