[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49926] branches/ge_harmony/source: Adding support for the falloff options (excluding custom curve) to the light shader.
Daniel Stokes
kupomail at gmail.com
Thu Aug 16 00:55:38 CEST 2012
Revision: 49926
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49926
Author: kupoman
Date: 2012-08-15 22:55:37 +0000 (Wed, 15 Aug 2012)
Log Message:
-----------
Adding support for the falloff options (excluding custom curve) to the light shader.
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 2012-08-15 22:15:37 UTC (rev 49925)
+++ branches/ge_harmony/source/blender/gpu/shaders/gpu_shader_light_frag.glsl 2012-08-15 22:55:37 UTC (rev 49926)
@@ -3,8 +3,16 @@
#define HEMI 2
#define NORMAL 3
+#define CONSTANT 0
+#define INVLINEAR 1
+#define INVSQUARE 2
+#define CURVE 3
+#define SLIDERS 4
+
struct Light {
int type;
+ int falloff;
+ vec2 att;
float energy;
vec3 color;
float dist;
@@ -33,7 +41,15 @@
float dist = length(L);
L = normalize(L);
- attenuation = light.dist/(light.dist + dist*dist);
+ if (light.falloff == INVLINEAR)
+ attenuation = light.dist/(light.dist + dist);
+ else if (light.falloff == INVSQUARE)
+ attenuation = light.dist/(light.dist + dist*dist);
+ else if (light.falloff == SLIDERS) {
+ float distkw = light.dist * light.dist;
+ attenuation = light.dist/(light.dist + light.att[0]*dist);
+ attenuation *= distkw/(distkw + light.att[1]*dist*dist);
+ }
}
float lambert = max(dot(N, L), 0.0);
Modified: branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2012-08-15 22:15:37 UTC (rev 49925)
+++ branches/ge_harmony/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2012-08-15 22:55:37 UTC (rev 49926)
@@ -1872,7 +1872,7 @@
KX_LightObject *gamelight;
lightobj.m_att1 = la->att1;
- lightobj.m_att2 = (la->mode & LA_QUAD) ? la->att2 : 0.0f;
+ lightobj.m_att2 = la->att2;
lightobj.m_red = la->r;
lightobj.m_green = la->g;
lightobj.m_blue = la->b;
@@ -1907,6 +1907,18 @@
lightobj.m_type = RAS_LightObject::LIGHT_NORMAL;
}
+ if (la->falloff_type==LA_FALLOFF_INVLINEAR) {
+ lightobj.m_falloff = RAS_LightObject::FALLOFF_INVLINEAR;
+ } else if (la->falloff_type==LA_FALLOFF_INVSQUARE) {
+ lightobj.m_falloff = RAS_LightObject::FALLOFF_INVSQUARE;
+ } else if (la->falloff_type==LA_FALLOFF_CURVE) {
+ lightobj.m_falloff = RAS_LightObject::FALLOFF_CURVE;
+ } else if (la->falloff_type==LA_FALLOFF_SLIDERS) {
+ lightobj.m_falloff = RAS_LightObject::FALLOFF_SLIDERS;
+ } else {
+ lightobj.m_falloff = RAS_LightObject::FALLOFF_CONSTANT;
+ }
+
gamelight = new KX_LightObject(kxscene, KX_Scene::m_callbacks, rendertools,
lightobj, glslmat);
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h 2012-08-15 22:15:37 UTC (rev 49925)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_LightObject.h 2012-08-15 22:55:37 UTC (rev 49926)
@@ -42,6 +42,13 @@
LIGHT_HEMI,
LIGHT_NORMAL
};
+ enum FalloffType {
+ FALLOFF_CONSTANT,
+ FALLOFF_INVLINEAR,
+ FALLOFF_INVSQUARE,
+ FALLOFF_CURVE,
+ FALLOFF_SLIDERS
+ };
bool m_modified;
int m_layer;
void *m_scene;
@@ -54,6 +61,7 @@
float m_green;
float m_blue;
+ FalloffType m_falloff;
float m_att1;
float m_att2;
float m_spotsize;
Modified: branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp
===================================================================
--- branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp 2012-08-15 22:15:37 UTC (rev 49925)
+++ branches/ge_harmony/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_OpenGLRasterizer.cpp 2012-08-15 22:55:37 UTC (rev 49926)
@@ -1466,6 +1466,13 @@
bind = GPU_shader_get_uniform(m_light_shader, "light.type");
GPU_shader_uniform_ivector(m_light_shader, bind, 1, 1, (int*)(&light->m_type));
+ bind = GPU_shader_get_uniform(m_light_shader, "light.falloff");
+ GPU_shader_uniform_ivector(m_light_shader, bind, 1, 1, (int*)(&light->m_falloff));
+
+ float att[2] = {light->m_att1, light->m_att2};
+ bind = GPU_shader_get_uniform(m_light_shader, "light.att");
+ GPU_shader_uniform_vector(m_light_shader, bind, 2, 1, att);
+
bind = GPU_shader_get_uniform(m_light_shader, "light.energy");
GPU_shader_uniform_vector(m_light_shader, bind, 1, 1, &light->m_energy);
More information about the Bf-blender-cvs
mailing list