[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15139] trunk/blender/source/blender: Added shadow baking

Campbell Barton ideasman42 at gmail.com
Fri Jun 6 00:08:00 CEST 2008


Revision: 15139
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15139
Author:   campbellbarton
Date:     2008-06-06 00:07:59 +0200 (Fri, 06 Jun 2008)

Log Message:
-----------
Added shadow baking

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/sceneRender.c
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/convertblender.c
    trunk/blender/source/blender/render/intern/source/rendercore.c
    trunk/blender/source/blender/src/buttons_scene.c

Modified: trunk/blender/source/blender/python/api2_2x/sceneRender.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/sceneRender.c	2008-06-05 19:39:33 UTC (rev 15138)
+++ trunk/blender/source/blender/python/api2_2x/sceneRender.c	2008-06-05 22:07:59 UTC (rev 15139)
@@ -2048,7 +2048,7 @@
 		break;
 	case EXPP_RENDER_ATTR_BAKEMODE:
 		min = RE_BAKE_LIGHT;
-		max = RE_BAKE_DISPLACEMENT;
+		max = RE_BAKE_SHADOW;
 		size = 'h';
 		param = &self->renderContext->bake_mode;
 		break;
@@ -3781,6 +3781,7 @@
 		PyConstant_Insert( d, "NORMALS", PyInt_FromLong( RE_BAKE_NORMALS ) );
 		PyConstant_Insert( d, "TEXTURE", PyInt_FromLong( RE_BAKE_TEXTURE ) );
 		PyConstant_Insert( d, "DISPLACEMENT", PyInt_FromLong( RE_BAKE_DISPLACEMENT ) );
+		PyConstant_Insert( d, "SHADOW", PyInt_FromLong( RE_BAKE_SHADOW ) );
 	}
 	return M;
 }

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2008-06-05 19:39:33 UTC (rev 15138)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2008-06-05 22:07:59 UTC (rev 15139)
@@ -220,6 +220,8 @@
 #define RE_BAKE_NORMALS			3
 #define RE_BAKE_TEXTURE			4
 #define RE_BAKE_DISPLACEMENT	5
+#define RE_BAKE_SHADOW			6
+
 void RE_Database_Baking(struct Render *re, struct Scene *scene, int type, struct Object *actob);
 
 void RE_DataBase_GetView(struct Render *re, float mat[][4]);

Modified: trunk/blender/source/blender/render/intern/source/convertblender.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/convertblender.c	2008-06-05 19:39:33 UTC (rev 15138)
+++ trunk/blender/source/blender/render/intern/source/convertblender.c	2008-06-05 22:07:59 UTC (rev 15139)
@@ -5419,6 +5419,7 @@
    RE_BAKE_AO:     for baking, no lamps, but all objects
    RE_BAKE_TEXTURE:for baking, no lamps, only selected objects
    RE_BAKE_DISPLACEMENT:for baking, no lamps, only selected objects
+   RE_BAKE_SHADOW: for baking, only shadows, but all objects
 */
 void RE_Database_Baking(Render *re, Scene *scene, int type, Object *actob)
 {
@@ -5449,6 +5450,10 @@
 		re->r.mode &= ~R_RAYTRACE;
 	}
 	
+	if(!actob && (type==RE_BAKE_SHADOW)) {
+		re->r.mode |= R_SHADOW;
+	}
+	
 	/* setup render stuff */
 	re->memArena = BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE);
 	
@@ -5486,7 +5491,7 @@
 	set_node_shader_lamp_loop(shade_material_loop);
 
 	/* MAKE RENDER DATA */
-	nolamps= !ELEM(type, RE_BAKE_LIGHT, RE_BAKE_ALL);
+	nolamps= !ELEM3(type, RE_BAKE_LIGHT, RE_BAKE_ALL, RE_BAKE_SHADOW);
 	onlyselected= ELEM3(type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_DISPLACEMENT);
 
 	database_init_objects(re, lay, nolamps, onlyselected, actob, 0);

Modified: trunk/blender/source/blender/render/intern/source/rendercore.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/rendercore.c	2008-06-05 19:39:33 UTC (rev 15138)
+++ trunk/blender/source/blender/render/intern/source/rendercore.c	2008-06-05 22:07:59 UTC (rev 15139)
@@ -2017,9 +2017,12 @@
 			ambient_occlusion_to_diffuse(shi, shr.combined);
 	}
 	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);
 		
-		if(!ELEM(bs->type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE))
+		if(!ELEM3(bs->type, RE_BAKE_NORMALS, RE_BAKE_TEXTURE, RE_BAKE_SHADOW))
 			shade_samples_do_AO(ssamp);
 		
 		if(shi->mat->nodetree && shi->mat->use_nodes) {
@@ -2070,6 +2073,10 @@
 			shr.combined[2]= shi->b;
 			shr.alpha = shi->alpha;
 		}
+		else if(bs->type==RE_BAKE_SHADOW) {
+			VECCOPY(shr.combined, shr.shad);
+			shr.alpha = shi->alpha;
+		}
 	}
 	
 	if(bs->rect_float) {
@@ -2505,7 +2512,12 @@
 		memset(&handles[a], 0, sizeof(BakeShade));
 		
 		handles[a].ssamp.shi[0].lay= re->scene->lay;
-		handles[a].ssamp.shi[0].passflag= SCE_PASS_COMBINED;
+		
+		if (type==RE_BAKE_SHADOW) {
+			handles[a].ssamp.shi[0].passflag= SCE_PASS_SHADOW;
+		} else {
+			handles[a].ssamp.shi[0].passflag= SCE_PASS_COMBINED;
+		}
 		handles[a].ssamp.shi[0].combinedflag= ~(SCE_PASS_SPEC);
 		handles[a].ssamp.shi[0].thread= a;
 		handles[a].ssamp.tot= 1;

Modified: trunk/blender/source/blender/src/buttons_scene.c
===================================================================
--- trunk/blender/source/blender/src/buttons_scene.c	2008-06-05 19:39:33 UTC (rev 15138)
+++ trunk/blender/source/blender/src/buttons_scene.c	2008-06-05 22:07:59 UTC (rev 15139)
@@ -2152,7 +2152,7 @@
 	}
 	
 	uiDefButS(block, MENU, B_NOP, "Quad Split Order%t|Quad Split Auto%x0|Quad Split A (0,1,2) (0,2,3)%x1|Quad Split B (1,2,3) (1,3,0)%x2", 
-		10,30,190,20, &G.scene->r.bake_quad_split, 0, 0, 0, 0, "Method to divide quads (use A or B for external applications that use a fixed order)");
+		10,10,190,20, &G.scene->r.bake_quad_split, 0, 0, 0, 0, "Method to divide quads (use A or B for external applications that use a fixed order)");
 	
 #if 0	
 	uiBlockBeginAlign(block);
@@ -2165,14 +2165,15 @@
 	uiBlockBeginAlign(block);
 	uiDefButS(block, ROW,B_REDR,"Full Render",		210,170,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_ALL, 0, 0, "");
 	uiDefButS(block, ROW,B_REDR,"Ambient Occlusion",210,150,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_AO, 0, 0, "");
-	uiDefButS(block, ROW,B_REDR,"Normals",		210,130,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_NORMALS, 0, 0, "");
-	uiDefButS(block, ROW,B_REDR,"Textures",		210,110,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_TEXTURE, 0, 0, "");
-	uiDefButS(block, ROW,B_REDR,"Displacement",		210,90,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_DISPLACEMENT, 0, 0, "");
+	uiDefButS(block, ROW,B_REDR,"Shadow",			210,130,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_SHADOW, 0, 0, "");
+	uiDefButS(block, ROW,B_REDR,"Normals",			210,110,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_NORMALS, 0, 0, "");
+	uiDefButS(block, ROW,B_REDR,"Textures",			210,90,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_TEXTURE, 0, 0, "");
+	uiDefButS(block, ROW,B_REDR,"Displacement",		210,70,120,20,&G.scene->r.bake_mode, 1.0, RE_BAKE_DISPLACEMENT, 0, 0, "");
 	uiBlockEndAlign(block);
 	
-	uiDefButBitS(block, TOG, R_BAKE_CLEAR, B_DIFF, "Clear",		210,60,120,20,&G.scene->r.bake_flag, 0.0, 0, 0, 0, "Clear Images before baking");
+	uiDefButBitS(block, TOG, R_BAKE_CLEAR, B_DIFF, "Clear",		210,40,120,20,&G.scene->r.bake_flag, 0.0, 0, 0, 0, "Clear Images before baking");
 	
-	uiDefButS(block, NUM, B_DIFF,"Margin:",				210,30,120,20,&G.scene->r.bake_filter, 0.0, 32.0, 0, 0, "Amount of pixels to extend the baked result with, as post process filter");
+	uiDefButS(block, NUM, B_DIFF,"Margin:",				210,10,120,20,&G.scene->r.bake_filter, 0.0, 32.0, 0, 0, "Amount of pixels to extend the baked result with, as post process filter");
 }
 
 static void render_panel_simplify(void)





More information about the Bf-blender-cvs mailing list