diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/object/object_bake.c | 35 | ||||
-rw-r--r-- | source/blender/render/intern/source/bake.c | 4 |
2 files changed, 29 insertions, 10 deletions
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c index 8b674cf1e50..6b169d2342c 100644 --- a/source/blender/editors/object/object_bake.c +++ b/source/blender/editors/object/object_bake.c @@ -264,7 +264,8 @@ static DerivedMesh *multiresbake_create_hiresdm(Scene *scene, Object *ob, int *l } typedef enum ClearFlag { - CLEAR_NORMAL = 1 + CLEAR_TANGENT_NORMAL = 1, + CLEAR_DISPLACEMENT = 2 } ClearFlag; @@ -275,6 +276,8 @@ static void clear_images(MTFace *mtface, int totface, ClearFlag flag) const float vec_solid[4] = {0.0f, 0.0f, 0.0f, 1.0f}; const float nor_alpha[4] = {0.5f, 0.5f, 1.0f, 0.0f}; const float nor_solid[4] = {0.5f, 0.5f, 1.0f, 1.0f}; + const float disp_alpha[4] = {0.5f, 0.5f, 0.5f, 0.0f}; + const float disp_solid[4] = {0.5f, 0.5f, 0.5f, 1.0f}; for (a = 0; a < totface; a++) mtface[a].tpage->id.flag &= ~LIB_DOIT; @@ -285,8 +288,10 @@ static void clear_images(MTFace *mtface, int totface, ClearFlag flag) if ((ima->id.flag & LIB_DOIT) == 0) { ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, NULL); - if (flag == CLEAR_NORMAL) + if (flag == CLEAR_TANGENT_NORMAL) IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? nor_alpha : nor_solid); + else if (flag == CLEAR_DISPLACEMENT) + IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? disp_alpha : disp_solid); else IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? vec_alpha : vec_solid); @@ -313,14 +318,19 @@ static int multiresbake_image_exec_locked(bContext *C, wmOperator *op) CTX_DATA_BEGIN (C, Base *, base, selected_editable_bases) { Mesh *me; + ClearFlag clear_flag = 0; ob = base->object; me = (Mesh *)ob->data; - if (scene->r.bake_mode == RE_BAKE_NORMALS && scene->r.bake_normal_space == R_BAKE_SPACE_TANGENT) - clear_images(me->mtface, me->totface, CLEAR_NORMAL); - else - clear_images(me->mtface, me->totface, 0); + if (scene->r.bake_mode == RE_BAKE_NORMALS) { + clear_flag = CLEAR_TANGENT_NORMAL; + } + else if (scene->r.bake_mode == RE_BAKE_DISPLACEMENT) { + clear_flag = CLEAR_DISPLACEMENT; + } + + clear_images(me->mtface, me->totface, clear_flag); } CTX_DATA_END; } @@ -414,11 +424,16 @@ static void multiresbake_startjob(void *bkv, short *stop, short *do_update, floa for (data = bkj->data.first; data; data = data->next) { DerivedMesh *dm = data->lores_dm; MTFace *mtface = CustomData_get_layer(&dm->faceData, CD_MTFACE); + ClearFlag clear_flag = 0; - if (bkj->mode == RE_BAKE_NORMALS) - clear_images(mtface, dm->getNumTessFaces(dm), CLEAR_NORMAL); - else - clear_images(mtface, dm->getNumTessFaces(dm), 0); + if (bkj->mode == RE_BAKE_NORMALS) { + clear_flag = CLEAR_TANGENT_NORMAL; + } + else if (bkj->mode == RE_BAKE_DISPLACEMENT) { + clear_flag = CLEAR_DISPLACEMENT; + } + + clear_images(mtface, dm->getNumTessFaces(dm), clear_flag); } } diff --git a/source/blender/render/intern/source/bake.c b/source/blender/render/intern/source/bake.c index 703db22371e..6e70e670ff8 100644 --- a/source/blender/render/intern/source/bake.c +++ b/source/blender/render/intern/source/bake.c @@ -647,6 +647,8 @@ static int get_next_bake_face(BakeShade *bs) const float vec_solid[4] = {0.0f, 0.0f, 0.0f, 1.0f}; const float nor_alpha[4] = {0.5f, 0.5f, 1.0f, 0.0f}; const float nor_solid[4] = {0.5f, 0.5f, 1.0f, 1.0f}; + const float disp_alpha[4] = {0.5f, 0.5f, 0.5f, 0.0f}; + const float disp_solid[4] = {0.5f, 0.5f, 0.5f, 1.0f}; tface = RE_vlakren_get_tface(obr, vlr, obr->bakemtface, NULL, 0); @@ -686,6 +688,8 @@ static int get_next_bake_face(BakeShade *bs) if (R.r.bake_flag & R_BAKE_CLEAR) { if (R.r.bake_mode == RE_BAKE_NORMALS && R.r.bake_normal_space == R_BAKE_SPACE_TANGENT) IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? nor_alpha : nor_solid); + else if (R.r.bake_mode == RE_BAKE_DISPLACEMENT) + IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? disp_alpha : disp_solid); else IMB_rectfill(ibuf, (ibuf->planes == R_IMF_PLANES_RGBA) ? vec_alpha : vec_solid); } |