[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60258] trunk/blender/source/blender: Clear color to gray when baking displacement map

Sergey Sharybin sergey.vfx at gmail.com
Fri Sep 20 12:14:54 CEST 2013


Revision: 60258
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60258
Author:   nazgul
Date:     2013-09-20 10:14:54 +0000 (Fri, 20 Sep 2013)
Log Message:
-----------
Clear color to gray when baking displacement map

This makes more sense to have no displacement if baking
non-normalized displacement map or have mid-level displacement
(which is likely be close to no displacement as well) when
baking normalized displacement.

In any way it's better than using default black color.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_bake.c
    trunk/blender/source/blender/render/intern/source/bake.c

Modified: trunk/blender/source/blender/editors/object/object_bake.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_bake.c	2013-09-20 09:28:58 UTC (rev 60257)
+++ trunk/blender/source/blender/editors/object/object_bake.c	2013-09-20 10:14:54 UTC (rev 60258)
@@ -264,7 +264,8 @@
 }
 
 typedef enum ClearFlag {
-	CLEAR_NORMAL = 1
+	CLEAR_TANGENT_NORMAL = 1,
+	CLEAR_DISPLACEMENT = 2
 } ClearFlag;
 
 
@@ -275,6 +276,8 @@
 	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 @@
 		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 @@
 		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 @@
 		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);
 		}
 	}
 

Modified: trunk/blender/source/blender/render/intern/source/bake.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/bake.c	2013-09-20 09:28:58 UTC (rev 60257)
+++ trunk/blender/source/blender/render/intern/source/bake.c	2013-09-20 10:14:54 UTC (rev 60258)
@@ -647,6 +647,8 @@
 					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 @@
 						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);
 						}




More information about the Bf-blender-cvs mailing list