[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30266] branches/render25/source/blender/ render/intern/source: Render Branch: restore behavior that when material ambient is zero, the

Brecht Van Lommel brecht at blender.org
Tue Jul 13 14:27:44 CEST 2010


Revision: 30266
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30266
Author:   blendix
Date:     2010-07-13 14:27:44 +0200 (Tue, 13 Jul 2010)

Log Message:
-----------
Render Branch: restore behavior that when material ambient is zero, the
material is also skipped in the AO pass. Not really correct but avoids
performance bottleneck rendering AO for hair.

Modified Paths:
--------------
    branches/render25/source/blender/render/intern/source/material.c
    branches/render25/source/blender/render/intern/source/shadeoutput.c

Modified: branches/render25/source/blender/render/intern/source/material.c
===================================================================
--- branches/render25/source/blender/render/intern/source/material.c	2010-07-13 11:50:04 UTC (rev 30265)
+++ branches/render25/source/blender/render/intern/source/material.c	2010-07-13 12:27:44 UTC (rev 30266)
@@ -664,6 +664,12 @@
 		return 0;
 	if(!((re->params.r.mode & R_RAYTRACE) || re->db.wrld.ao_gather_method == WO_LIGHT_GATHER_APPROX))
 		return 0;
+
+	/* some materials don't need it */
+	if(ma->mode & MA_SHLESS)
+		return 0;
+	else if(ma->amb == 0.0f && !(ma->mapto & MAP_AMB))
+		return 0;
 	
 	/* if requested for passes, always render it */
 	if(shi->shading.passflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))
@@ -674,11 +680,13 @@
 		if(!(shi->shading.combinedflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT)))
 			return 0;
 
+#if 0
 		/* some materials don't need it */
 		if(ma->mode & MA_SHLESS)
 			return 0;
 		else if(ma->amb == 0.0f && !(ma->mapto & MAP_AMB))
 			return 0;
+#endif
 
 		return 1;
 	}

Modified: branches/render25/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-07-13 11:50:04 UTC (rev 30265)
+++ branches/render25/source/blender/render/intern/source/shadeoutput.c	2010-07-13 12:27:44 UTC (rev 30266)
@@ -115,6 +115,13 @@
 
 /***************************** AO / Env / Indirect *****************************/
 
+static void default_ao_env_indirect(ShadeInput *shi)
+{
+	shi->shading.ao[0]= shi->shading.ao[1]= shi->shading.ao[2]= 1.0f;
+	shi->shading.env[0]= shi->shading.env[1]= shi->shading.env[2]= 0.0f;
+	shi->shading.indirect[0]= shi->shading.indirect[1]= shi->shading.indirect[2]= 0.0f;
+}
+
 void shade_ao_env_indirect(Render *re, ShadeInput *shi)
 {
 	if(re->db.wrld.ao_gather_method == WO_LIGHT_GATHER_APPROX) {
@@ -154,11 +161,6 @@
 		if(ao)
 			ao[1]= ao[2]= ao[0];
 	}
-	else {
-		shi->shading.ao[0]= shi->shading.ao[1]= shi->shading.ao[2]= 1.0f;
-		shi->shading.env[0]= shi->shading.env[1]= shi->shading.env[2]= 0.0f;
-		shi->shading.indirect[0]= shi->shading.indirect[1]= shi->shading.indirect[2]= 0.0f;
-	}
 }
 
 /* wrld mode was checked for */
@@ -309,6 +311,8 @@
 			shr->alpha= (shr->alpha + f)*f;
 		}
 	}
+	else
+		default_ao_env_indirect(shi);
 }
 
 /**************************** Color & Alpha Pass *****************************/
@@ -689,18 +693,19 @@
 	int post_sss= ((ma->sss_flag & MA_DIFF_SSS) && sss_pass_done(re, ma));
 
 	if(!post_sss || (passflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) {
-		if(mat_need_ao_env_indirect(re, shi)) {
+		if(mat_need_ao_env_indirect(re, shi))
 			shade_ao_env_indirect(re, shi);
+		else
+			default_ao_env_indirect(shi);
 
-			if(re->db.wrld.mode & WO_ENV_LIGHT)
-				environment_lighting_apply(re, shi, shr);
+		if(re->db.wrld.mode & WO_ENV_LIGHT)
+			environment_lighting_apply(re, shi, shr);
 
-			if(re->db.wrld.mode & WO_INDIRECT_LIGHT)
-				indirect_lighting_apply(re, shi, shr);
+		if(re->db.wrld.mode & WO_INDIRECT_LIGHT)
+			indirect_lighting_apply(re, shi, shr);
 
-			if(re->db.wrld.mode & WO_AMB_OCC)
-				ambient_occlusion_apply(re, shi, shr);
-		}
+		if(re->db.wrld.mode & WO_AMB_OCC)
+			ambient_occlusion_apply(re, shi, shr);
 			
 		/* ambient light */
 		madd_v3_v3fl(shr->diff, &re->db.wrld.ambr, shi->material.amb);





More information about the Bf-blender-cvs mailing list