All pastes #804065 Raw Edit

autobake and ao stuff

public text v1 · immutable
·published 2007-12-03 02:15 UTC
rendered paste body
Index: blender/makesdna/DNA_material_types.h
===================================================================
--- blender/makesdna/DNA_material_types.h	(revision 12706)
+++ blender/makesdna/DNA_material_types.h	(working copy)
@@ -191,6 +191,7 @@
 #define MA_GROUP_NOLAY	0x10000000
 #define MA_FACETEXTURE_ALPHA	0x20000000
 #define MA_STR_B_UNITS	0x40000000
+#define MA_NO_USE_AO	0x80000000
 
 #define	MA_MODE_MASK	0x4fffffff	/* all valid mode bits */
 
Index: blender/python/api2_2x/sceneRender.c
===================================================================
--- blender/python/api2_2x/sceneRender.c	(revision 12706)
+++ blender/python/api2_2x/sceneRender.c	(working copy)
@@ -488,6 +488,14 @@
 	Py_RETURN_NONE;
 }
 
+PyObject *RenderData_RenderBake( BPy_RenderData * self )
+{
+	Scene *oldsce;
+	objects_bake_render(0);
+
+	Py_RETURN_NONE;
+}
+
 /* 
  * This will save the rendered image to an output file path already defined.
  */
@@ -2682,6 +2690,8 @@
 	 "(filename) - save an image generated by a call to render() (set output path first)"},
 	{"renderAnim", ( PyCFunction ) RenderData_RenderAnim, METH_NOARGS,
 	 "() - render a sequence from start frame to end frame"},
+	{"renderBake", ( PyCFunction ) RenderData_RenderBake, METH_NOARGS,
+	 "() - render bake of the selected objects"},
 	{"play", ( PyCFunction ) RenderData_Play, METH_NOARGS,
 	 "() - play animation of rendered images/avi (searches Pics: field)"},
 	{"setRenderPath", ( PyCFunction ) RenderData_SetRenderPath,
Index: blender/render/intern/source/convertblender.c
===================================================================
--- blender/render/intern/source/convertblender.c	(revision 12706)
+++ blender/render/intern/source/convertblender.c	(working copy)
@@ -4923,6 +4923,11 @@
 			}
 		}
 	}
+
+	if (re->r.renderer==R_INTERN)
+			if(!re->test_break())
+				if(re->r.mode & R_RADIO) do_radio_render(re);
+
 }
 
 void RE_DataBase_GetView(Render *re, float mat[][4])
Index: blender/render/intern/source/rayshade.c
===================================================================
--- blender/render/intern/source/rayshade.c	(revision 12706)
+++ blender/render/intern/source/rayshade.c	(working copy)
@@ -1508,8 +1508,19 @@
 		prev = fac;
 		
 		if(RE_ray_tree_intersect(R.raytree, &isec)) {
-			if (R.wrld.aomode & WO_AODIST) fac+= exp(-isec.labda*R.wrld.aodistfac); 
-			else fac+= 1.0f;
+			VlakRen *vlr= (VlakRen*)isec.face;
+			float transfact;
+			if (vlr->mat->mode & MA_RAYTRANSP){
+				transfact=vlr->mat->alpha;
+				if (vlr->mat->mode & MA_RAYMIRROR)
+					transfact=(vlr->mat->ray_mirror+transfact)/2.0f;
+			}
+			else
+				transfact=1.0;
+			if (R.wrld.aomode & WO_AODIST) {
+				fac+= transfact*exp(-isec.labda*R.wrld.aodistfac); 
+			}
+			else fac+= transfact*1.0f;
 		}
 		else if(aocolor!=WO_AOPLAIN) {
 			float skycol[4];
@@ -1627,8 +1638,20 @@
 			
 			/* do the trace */
 			if(RE_ray_tree_intersect(R.raytree, &isec)) {
-				if (R.wrld.aomode & WO_AODIST) sh+= exp(-isec.labda*R.wrld.aodistfac); 
-				else sh+= 1.0f;
+				VlakRen *vlr= (VlakRen*)isec.face;
+				float transfact;
+				if (vlr->mat->mode & MA_RAYTRANSP){
+					transfact=vlr->mat->alpha;
+					if (vlr->mat->mode & MA_RAYMIRROR)
+						transfact=(vlr->mat->ray_mirror+transfact)/2.0f;
+				}
+				else
+					transfact=1.0;
+				if (R.wrld.aomode & WO_AODIST){
+					VlakRen *vlr= (VlakRen*)isec.face;
+					sh+= transfact*exp(-isec.labda*R.wrld.aodistfac); 
+				}
+				else sh+= transfact*1.0f;
 			}
 			else if(aocolor!=WO_AOPLAIN) {
 				float skycol[4];
@@ -1683,6 +1706,9 @@
 		ray_ao_qmc(shi, shadfac);
 	else if (R.wrld.ao_samp_method == WO_AOSAMP_CONSTANT)
 		ray_ao_spheresamp(shi, shadfac);
+	shadfac[0]*=(1.0-shi->mat->translucency);
+	shadfac[1]*=(1.0-shi->mat->translucency);
+	shadfac[2]*=(1.0-shi->mat->translucency);
 }
 
 
Index: blender/render/intern/source/shadeoutput.c
===================================================================
--- blender/render/intern/source/shadeoutput.c	(revision 12706)
+++ blender/render/intern/source/shadeoutput.c	(working copy)
@@ -975,7 +975,7 @@
 void ambient_occlusion(ShadeInput *shi)
 {
 	
-	if((R.r.mode & R_RAYTRACE) && shi->mat->amb!=0.0f)
+	if((R.r.mode & R_RAYTRACE) && shi->mat->amb!=0.0f && !(shi->mode & MA_NO_USE_AO))
 		ray_ao(shi, shi->ao);
 	else
 		shi->ao[0]= shi->ao[1]= shi->ao[2]= 1.0f;
Index: blender/src/buttons_shading.c
===================================================================
--- blender/src/buttons_shading.c	(revision 12706)
+++ blender/src/buttons_shading.c	(working copy)
@@ -3791,6 +3791,7 @@
 		uiDefButBitI(block, TOG, MA_SHADOW_TRA, B_MATPRV, "TraShadow",		245,120,65,19, &(ma->mode), 0, 0, 0, 0, "Receives transparent shadows based at material color and alpha");
 		uiDefButBitI(block, TOG, MA_ONLYSHADOW, B_MATPRV,	"OnlyShad",		245,100,65,20, &(ma->mode), 0, 0, 0, 0, "Renders shadows on material as Alpha value");
 		uiDefButBitI(block, TOG, MA_RAYBIAS, B_MATPRV, "Bias",				245,80,65,19, &(ma->mode), 0, 0, 0, 0, "Prevents ray traced shadow errors with phong interpolated normals (terminator problem)");
+		uiDefButBitI(block, TOG, MA_NO_USE_AO, B_MATPRV, "NO AO",			245,60,65,19, &(ma->mode), 0, 0, 0, 0, "Prevents AO");
 
 		uiBlockBeginAlign(block);
 		uiDefIDPoinBut(block, test_grouppoin_but, ID_GR, B_MATPRV, "GR:",	9, 55, 150, 19, &ma->group, "Limit Lighting to Lamps in this Group");