[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