[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