[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60656] trunk/blender/source/blender: Support for baking vertex colors to textures.

Antony Riakiotakis kalast at gmail.com
Thu Oct 10 13:00:13 CEST 2013


Revision: 60656
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60656
Author:   psy-fi
Date:     2013-10-10 11:00:12 +0000 (Thu, 10 Oct 2013)
Log Message:
-----------
Support for baking vertex colors to textures.

It allows effects such as baking vertex dirt maps to textures.
Also vertex based painting painting may be faster in the future,
so this is useful to have.

Thanks to Sergey for the review!

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/include/render_types.h
    trunk/blender/source/blender/render/intern/source/bake.c
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/shadeinput.c

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-10-10 06:33:23 UTC (rev 60655)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2013-10-10 11:00:12 UTC (rev 60656)
@@ -4089,6 +4089,7 @@
 		{RE_BAKE_TEXTURE, "TEXTURE", 0, "Textures", "Bake textures"},
 		{RE_BAKE_DISPLACEMENT, "DISPLACEMENT", 0, "Displacement", "Bake displacement"},
 		{RE_BAKE_DERIVATIVE, "DERIVATIVE", 0, "Derivative", "Bake derivative map"},
+		{RE_BAKE_VERTEX_COLORS, "VERTEX_COLORS", 0, "Vertex Colors", "Bake vertex colors"},
 		{RE_BAKE_EMIT, "EMIT", 0, "Emission", "Bake Emit values (glow)"},
 		{RE_BAKE_ALPHA, "ALPHA", 0, "Alpha", "Bake Alpha values (transparency)"},
 		{RE_BAKE_MIRROR_INTENSITY, "MIRROR_INTENSITY", 0, "Mirror Intensity", "Bake Mirror values"},

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2013-10-10 06:33:23 UTC (rev 60655)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2013-10-10 11:00:12 UTC (rev 60656)
@@ -281,7 +281,8 @@
 #define RE_BAKE_MIRROR_INTENSITY	10
 #define RE_BAKE_ALPHA				11
 #define RE_BAKE_EMIT				12
-#define RE_BAKE_DERIVATIVE		13
+#define RE_BAKE_DERIVATIVE			13
+#define RE_BAKE_VERTEX_COLORS		14
 
 void RE_Database_Baking(struct Render *re, struct Main *bmain, struct Scene *scene, unsigned int lay, const int type, struct Object *actob);
 

Modified: trunk/blender/source/blender/render/intern/include/render_types.h
===================================================================
--- trunk/blender/source/blender/render/intern/include/render_types.h	2013-10-10 06:33:23 UTC (rev 60655)
+++ trunk/blender/source/blender/render/intern/include/render_types.h	2013-10-10 11:00:12 UTC (rev 60656)
@@ -621,6 +621,7 @@
 #define R_BAKE_TRACE	32
 #define R_BAKING		64
 #define R_ANIMATION		128
+#define R_NEED_VCOL		256
 
 /* vlakren->flag (vlak = face in dutch) char!!! */
 #define R_SMOOTH		1

Modified: trunk/blender/source/blender/render/intern/source/bake.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/bake.c	2013-10-10 06:33:23 UTC (rev 60655)
+++ trunk/blender/source/blender/render/intern/source/bake.c	2013-10-10 11:00:12 UTC (rev 60656)
@@ -168,7 +168,7 @@
 	else {
 		if (bs->type == RE_BAKE_SHADOW) /* Why do shadows set the color anyhow?, ignore material color for baking */
 			shi->r = shi->g = shi->b = 1.0f;
-	
+
 		shade_input_set_shade_texco(shi);
 		
 		/* only do AO for a full bake (and obviously AO bakes)
@@ -260,6 +260,10 @@
 			copy_v3_fl(shr.combined, shi->emit);
 			shr.alpha = 1.0f;
 		}
+		else if (bs->type == RE_BAKE_VERTEX_COLORS) {
+			copy_v3_v3(shr.combined, shi->vcol);
+			shr.alpha = 1.0;
+		}
 	}
 	
 	if (bs->rect_float && !bs->vcol) {

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2013-10-10 06:33:23 UTC (rev 60655)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2013-10-10 11:00:12 UTC (rev 60656)
@@ -5982,6 +5982,7 @@
  * RE_BAKE_NORMALS:for baking, no lamps and only selected objects
  * RE_BAKE_AO:     for baking, no lamps, but all objects
  * RE_BAKE_TEXTURE:for baking, no lamps, only selected objects
+ * RE_BAKE_VERTEX_COLORS:for baking, no lamps, only selected objects
  * RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects
  * RE_BAKE_DERIVATIVE:for baking, no lamps, only selected objects
  * RE_BAKE_SHADOW: for baking, only shadows, but all objects
@@ -5991,8 +5992,8 @@
 	Object *camera;
 	float mat[4][4];
 	float amb[3];
-	const short onlyselected= !ELEM4(type, RE_BAKE_LIGHT, RE_BAKE_ALL, RE_BAKE_SHADOW, RE_BAKE_AO);
-	const short nolamps= ELEM4(type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE);
+	const short onlyselected= !ELEM5(type, RE_BAKE_LIGHT, RE_BAKE_ALL, RE_BAKE_SHADOW, RE_BAKE_AO, RE_BAKE_VERTEX_COLORS);
+	const short nolamps= ELEM5(type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE, RE_BAKE_VERTEX_COLORS);
 
 	re->main= bmain;
 	re->scene= scene;
@@ -6010,8 +6011,11 @@
 
 	if (type==RE_BAKE_NORMALS && re->r.bake_normal_space==R_BAKE_SPACE_TANGENT)
 		re->flag |= R_NEED_TANGENT;
-	
-	if (!actob && ELEM5(type, RE_BAKE_LIGHT, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE)) {
+
+	if (type==RE_BAKE_VERTEX_COLORS)
+		re->flag |=  R_NEED_VCOL;
+
+	if (!actob && ELEM6(type, RE_BAKE_LIGHT, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT, RE_BAKE_DERIVATIVE, RE_BAKE_VERTEX_COLORS)) {
 		re->r.mode &= ~R_SHADOW;
 		re->r.mode &= ~R_RAYTRACE;
 	}

Modified: trunk/blender/source/blender/render/intern/source/shadeinput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeinput.c	2013-10-10 06:33:23 UTC (rev 60655)
+++ trunk/blender/source/blender/render/intern/source/shadeinput.c	2013-10-10 11:00:12 UTC (rev 60656)
@@ -1002,7 +1002,7 @@
 	}
 
 	/* pass option forces UV calc */
-	if (shi->passflag & SCE_PASS_UV)
+	if ((shi->passflag & SCE_PASS_UV) || (R.flag & R_NEED_VCOL))
 		texco |= (NEED_UV | TEXCO_UV);
 	
 	/* texture coordinates. shi->dxuv shi->dyuv have been set */
@@ -1056,7 +1056,7 @@
 			}
 		}
 				
-		if ((texco & TEXCO_UV) || (mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE))) {
+		if ((texco & TEXCO_UV) || (mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) || (R.flag & R_NEED_VCOL)) {
 			VlakRen *vlr = shi->vlr;
 			MTFace *tface;
 			MCol *mcol;
@@ -1071,7 +1071,7 @@
 			shi->actuv = obr->actmtface;
 			shi->actcol = obr->actmcol;
 
-			if (mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) {
+			if ((mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) || (R.flag & R_NEED_VCOL)) {
 				for (i = 0; (mcol = RE_vlakren_get_mcol(obr, vlr, i, &name, 0)); i++) {
 					ShadeInputCol *scol = &shi->col[i];
 					char *cp1, *cp2, *cp3;
@@ -1213,7 +1213,7 @@
 					}
 
 					if ((mode & MA_FACETEXTURE) && i == obr->actmtface) {
-						if ((mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) == 0) {
+						if (((mode & (MA_VERTEXCOL | MA_VERTEXCOLP)) == 0) && ((R.flag & R_NEED_VCOL) == 0)) {
 							shi->vcol[0] = 1.0f;
 							shi->vcol[1] = 1.0f;
 							shi->vcol[2] = 1.0f;
@@ -1299,7 +1299,7 @@
 	 * else un-initialized values are used
 	 */
 	if (shi->do_manage) {
-		if (mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) {
+		if ((mode & (MA_VERTEXCOL | MA_VERTEXCOLP | MA_FACETEXTURE)) || (R.flag & R_NEED_VCOL)) {
 			srgb_to_linearrgb_v3_v3(shi->vcol, shi->vcol);
 		}
 	}




More information about the Bf-blender-cvs mailing list