[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54832] branches/ge_harmony/source: Inferred lighting shadows now take color and specularity into account.

Daniel Stokes kupomail at gmail.com
Mon Feb 25 03:49:46 CET 2013


Revision: 54832
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54832
Author:   kupoman
Date:     2013-02-25 02:49:45 +0000 (Mon, 25 Feb 2013)
Log Message:
-----------
Inferred lighting shadows now take color and specularity into account.

Modified Paths:
--------------
    branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
    branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
    branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp

Modified: branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2013-02-25 02:23:38 UTC (rev 54831)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl	2013-02-25 02:49:45 UTC (rev 54832)
@@ -50,6 +50,7 @@
 	float shadowbias;
 	float shadowbleed;
 	mat4 shadowpersmat;
+	vec3 shadowcolor;
 };
 
 varying vec3 varposition;
@@ -181,22 +182,26 @@
 		shade_phong_spec(N, L, view, 1.0, hardness);
 #endif
 
-	if (bgl_Light.shadowtype == SHADOW_SIMPLE) {
-		float shadfac;
-		test_shadowbuf(V, bgl_Light.shadowbuffer, bgl_Light.shadowpersmat, bgl_Light.shadowbias,
-			diff_term, shadfac);
-		diff_term *= shadfac;
-	}
-	else if (bgl_Light.shadowtype == SHADOW_VARIANCE) {
-		float shadfac;
-		test_shadowbuf_vsm(V, bgl_Light.shadowbuffercol, bgl_Light.shadowpersmat, bgl_Light.shadowbias,
-			bgl_Light.shadowbleed, diff_term, shadfac);
-		diff_term *= shadfac;
-	}
-
 	// Factor in light properties
 	vec3 diff = bgl_Light.color * bgl_Light.energy * diff_term * attenuation;
 	float spec = length(bgl_Light.energy) * spec_term * attenuation;
+	
+	// Handle shadows
+	if (bgl_Light.shadowtype != SHADOW_NONE) {
+		float shadfac = 1.0;
+		if (bgl_Light.shadowtype == SHADOW_SIMPLE) {
+			test_shadowbuf(V, bgl_Light.shadowbuffer, bgl_Light.shadowpersmat, bgl_Light.shadowbias,
+				diff_term, shadfac);
+		}
+		else if (bgl_Light.shadowtype == SHADOW_VARIANCE) {
+			test_shadowbuf_vsm(V, bgl_Light.shadowbuffercol, bgl_Light.shadowpersmat, bgl_Light.shadowbias,
+				bgl_Light.shadowbleed, diff_term, shadfac);
+		}
+		
+		diff = mix(diff, diff*bgl_Light.shadowcolor, (1.0 - shadfac));
+		spec *= shadfac;
+	}
+	
 	gl_FragData[0] = vec4(diff, spec);
 }
 

Modified: branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2013-02-25 02:23:38 UTC (rev 54831)
+++ branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp	2013-02-25 02:49:45 UTC (rev 54832)
@@ -1873,7 +1873,10 @@
 	lightobj.m_shadowtype = la->shadowmap_type;
 	lightobj.m_shadowbias = la->bias;
 	lightobj.m_shadowbleed = la->bleedbias;
-	
+	lightobj.m_shadowcolor[0] = la->shdwr;
+	lightobj.m_shadowcolor[1] = la->shdwg;
+	lightobj.m_shadowcolor[2] = la->shdwb;
+
 	bool glslmat = converter->GetGLSLMaterials();
 
 	// in GLSL NEGATIVE LAMP is handled inside the lamp update function

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h	2013-02-25 02:23:38 UTC (rev 54831)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h	2013-02-25 02:49:45 UTC (rev 54832)
@@ -81,6 +81,7 @@
 	float	m_shadowbias;
 	float	m_shadowbleed;
 	float*	m_shadowpersmat;
+	float	m_shadowcolor[3];
 };
 
 #endif  /* __RAS_LIGHTOBJECT_H__ */

Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-02-25 02:23:38 UTC (rev 54831)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp	2013-02-25 02:49:45 UTC (rev 54832)
@@ -1551,6 +1551,9 @@
 
 		bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.shadowpersmat");
 		GPU_shader_uniform_vector(m_light_shader, bind, 16, 1, light->m_shadowpersmat);
+
+		bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.shadowcolor");
+		GPU_shader_uniform_vector(m_light_shader, bind, 3, 1, light->m_shadowcolor);
 	}
 	else {
 		bind = GPU_shader_get_uniform(m_light_shader, "bgl_Light.shadowtype");




More information about the Bf-blender-cvs mailing list