[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [61235] trunk/blender/source/blender: Change the behavior of AO pass in Blender internal's shader/ render node tree so that it becomes (1.0, 1.0, 1.0) when AO is disabled.

Shinsuke Irie irieshinsuke at yahoo.co.jp
Tue Nov 12 11:59:40 CET 2013


Revision: 61235
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=61235
Author:   irie
Date:     2013-11-12 10:59:40 +0000 (Tue, 12 Nov 2013)
Log Message:
-----------
Change the behavior of AO pass in Blender internal's shader/render node tree so that it becomes (1.0, 1.0, 1.0) when AO is disabled.

For materials using AO pass, this makes the material preview and the GLSL
preview more accurate, but shouldn't affect final rendering in most cases
because we usually enable AO when using the AO pass in node tree.

Thanks to Brecht for code review.

Modified Paths:
--------------
    trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_material.c
    trunk/blender/source/blender/render/intern/source/shadeoutput.c

Modified: trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl
===================================================================
--- trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl	2013-11-12 07:02:04 UTC (rev 61234)
+++ trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl	2013-11-12 10:59:40 UTC (rev 61235)
@@ -393,11 +393,21 @@
 	outval = vec3(0.0);
 }
 
+void set_rgb_one(out vec3 outval)
+{
+	outval = vec3(1.0);
+}
+
 void set_rgba_zero(out vec4 outval)
 {
 	outval = vec4(0.0);
 }
 
+void set_rgba_one(out vec4 outval)
+{
+	outval = vec4(1.0);
+}
+
 void brightness_contrast(vec4 col, float brightness, float contrast, out vec4 outcol)
 {
 	float a = 1.0 + contrast;

Modified: trunk/blender/source/blender/nodes/shader/nodes/node_shader_material.c
===================================================================
--- trunk/blender/source/blender/nodes/shader/nodes/node_shader_material.c	2013-11-12 07:02:04 UTC (rev 61234)
+++ trunk/blender/source/blender/nodes/shader/nodes/node_shader_material.c	2013-11-12 10:59:40 UTC (rev 61235)
@@ -299,6 +299,7 @@
 		if (node->type == SH_NODE_MATERIAL_EXT) {
 			out[MAT_OUT_DIFFUSE].link = shr.diff;
 			out[MAT_OUT_SPEC].link = shr.spec;
+			GPU_link(mat, "set_rgb_one", &out[MAT_OUT_AO].link);
 		}
 
 		return 1;

Modified: trunk/blender/source/blender/render/intern/source/shadeoutput.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/shadeoutput.c	2013-11-12 07:02:04 UTC (rev 61234)
+++ trunk/blender/source/blender/render/intern/source/shadeoutput.c	2013-11-12 10:59:40 UTC (rev 61235)
@@ -1789,19 +1789,21 @@
 	}
 	
 	/* AO pass */
-	if (R.wrld.mode & (WO_AMB_OCC|WO_ENV_LIGHT|WO_INDIRECT_LIGHT)) {
-		if (((passflag & SCE_PASS_COMBINED) && (shi->combinedflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) ||
-		    (passflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT)))
-		{
-			if (R.r.mode & R_SHADOW) {
-				/* AO was calculated for scanline already */
-				if (shi->depth || shi->volume_depth)
-					ambient_occlusion(shi);
-				copy_v3_v3(shr->ao, shi->ao);
-				copy_v3_v3(shr->env, shi->env); /* XXX multiply */
-				copy_v3_v3(shr->indirect, shi->indirect); /* XXX multiply */
-			}
+	if (((passflag & SCE_PASS_COMBINED) && (shi->combinedflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) ||
+	    (passflag & (SCE_PASS_AO|SCE_PASS_ENVIRONMENT|SCE_PASS_INDIRECT))) {
+		if ((R.wrld.mode & (WO_AMB_OCC|WO_ENV_LIGHT|WO_INDIRECT_LIGHT)) && (R.r.mode & R_SHADOW)) {
+			/* AO was calculated for scanline already */
+			if (shi->depth || shi->volume_depth)
+				ambient_occlusion(shi);
+			copy_v3_v3(shr->ao, shi->ao);
+			copy_v3_v3(shr->env, shi->env); /* XXX multiply */
+			copy_v3_v3(shr->indirect, shi->indirect); /* XXX multiply */
 		}
+		else {
+			shr->ao[0]= shr->ao[1]= shr->ao[2]= 1.0f;
+			zero_v3(shr->env);
+			zero_v3(shr->indirect);
+		}
 	}
 	
 	/* lighting pass */




More information about the Bf-blender-cvs mailing list