[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42698] branches/ge_harmony: Here is a start on shadows for Sun lamps.

Daniel Stokes kupomail at gmail.com
Sat Dec 17 23:40:54 CET 2011


Revision: 42698
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42698
Author:   kupoman
Date:     2011-12-17 22:40:51 +0000 (Sat, 17 Dec 2011)
Log Message:
-----------
Here is a start on shadows for Sun lamps. The biggest difference between the sun shadows and spot shadows is that sun shadows are orthographic.

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py
    branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
    branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
    branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
    branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c

Modified: branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py
===================================================================
--- branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py	2011-12-17 21:24:39 UTC (rev 42697)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py	2011-12-17 22:40:51 UTC (rev 42698)
@@ -193,7 +193,7 @@
 
     @classmethod
     def poll(cls, context):
-        COMPAT_LIGHTS = {'SPOT', 'POINT'}
+        COMPAT_LIGHTS = {'SPOT', 'SUN'}
         lamp = context.lamp
         engine = context.scene.render.engine
         return (lamp and lamp.type in COMPAT_LIGHTS) and (engine in cls.COMPAT_ENGINES)

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c	2011-12-17 21:24:39 UTC (rev 42697)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c	2011-12-17 22:40:51 UTC (rev 42698)
@@ -610,6 +610,8 @@
 
 	if (tex) {
 		/* Now we tweak some of the settings */
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 		glTexImage2D(GL_TEXTURE_2D, 0, GL_RG32F, size, size, 0, GL_RG, GL_FLOAT, 0);
 
 		GPU_texture_unbind(tex);

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_material.c	2011-12-17 21:24:39 UTC (rev 42697)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_material.c	2011-12-17 22:40:51 UTC (rev 42698)
@@ -1588,12 +1588,17 @@
 	lamp->bias *= 0.25f;
 
 	/* makeshadowbuf */
-	angle= saacos(lamp->spotsi);
-	temp= 0.5f*lamp->size*cosf(angle)/sinf(angle);
-	pixsize= (lamp->d)/temp;
-	wsize= pixsize*0.5f*lamp->size;
-		
-	perspective_m4( lamp->winmat,-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
+	if (lamp->type == LA_SUN) {
+		wsize = 10;
+		orthographic_m4( lamp->winmat,-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
+	}
+	else {
+		angle= saacos(lamp->spotsi);
+		temp= 0.5f*lamp->size*cosf(angle)/sinf(angle);
+		pixsize= (lamp->d)/temp;
+		wsize= pixsize*0.5f*lamp->size;
+		perspective_m4( lamp->winmat,-wsize, wsize, -wsize, wsize, lamp->d, lamp->clipend);
+	}
 }
 
 static void gpu_lamp_shadow_free(GPULamp *lamp)
@@ -1642,7 +1647,7 @@
 	la = ob->data;
 	gpu_lamp_from_blender(scene, ob, par, la, lamp);
 
-	if(la->type==LA_SPOT && (la->mode & LA_SHAD_BUF)) {
+	if((la->type==LA_SPOT || la->type==LA_SUN) && (la->mode & LA_SHAD_BUF)) {
 		/* opengl */
 		lamp->fb = GPU_framebuffer_create();
 		if(!lamp->fb) {

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl	2011-12-17 21:24:39 UTC (rev 42697)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl	2011-12-17 22:40:51 UTC (rev 42698)
@@ -1784,8 +1784,11 @@
 
 		//float bias = (1.5 - inp*inp)*shadowbias;
 		co.z -= shadowbias*co.w;
-
-		result = shadow2DProj(shadowmap, co).x;
+		
+		if (co.w > 0.0 && co.x > 0.0 && co.y > 0.0)
+			result = shadow2DProj(shadowmap, co).x;
+		else
+			result = 1.0;
 	}
 }
 
@@ -1796,23 +1799,28 @@
 	}
 	else {
 		vec4 co = shadowpersmat*vec4(rco, 1.0);
-		vec2 moments = texture2DProj(shadowmap, co).rg;
-		float dist = co.z/co.w;
-		float p = 0.0;
-		
-		if(dist <= moments.x)
-			p = 1.0;
+		if (co.w > 0.0 && co.x > 0.0  && co.y > 0.0) {
+			vec2 moments = texture2DProj(shadowmap, co).rg;
+			float dist = co.z/co.w;
+			float p = 0.0;
+			
+			if(dist <= moments.x)
+				p = 1.0;
 
-		float variance = moments.y - (moments.x*moments.x);
-		variance = max(variance, shadowbias/10.0);
+			float variance = moments.y - (moments.x*moments.x);
+			variance = max(variance, shadowbias/10.0);
 
-		float d = moments.x - dist;
-		float p_max = variance / (variance + d*d);
+			float d = moments.x - dist;
+			float p_max = variance / (variance + d*d);
 
-		// Now reduce light-bleeding by removing the [0, x] tail and linearly rescaling (x, 1]
-		p_max = clamp((p_max-bleedbias)/(1.0-bleedbias), 0, 1);
+			// Now reduce light-bleeding by removing the [0, x] tail and linearly rescaling (x, 1]
+			p_max = clamp((p_max-bleedbias)/(1.0-bleedbias), 0, 1);
 
-		result = max(p, p_max);
+			result = max(p, p_max);
+		}
+		else {
+			result = 1.0;
+		}			
 	}
 }
 

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c	2011-12-17 21:24:39 UTC (rev 42697)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c	2011-12-17 22:40:51 UTC (rev 42698)
@@ -1,1318 +1,1323 @@
 /* DataToC output of file <gpu_shader_material_glsl> */
 
-int datatoc_gpu_shader_material_glsl_size= 49992;
+int datatoc_gpu_shader_material_glsl_size= 50172;
 char datatoc_gpu_shader_material_glsl[]= {
- 13, 10,102,108,111, 97,116, 32,
-101,120,112, 95, 98,108,101,110,100,101,114, 40,102,108,111, 97,116, 32,102, 41, 13, 10,123, 13, 10,  9,114,101,116,117,114,110,
- 32,112,111,119, 40, 50, 46, 55, 49, 56, 50, 56, 49, 56, 50, 56, 52, 54, 44, 32,102, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,
-105,100, 32,114,103, 98, 95,116,111, 95,104,115,118, 40,118,101, 99, 52, 32,114,103, 98, 44, 32,111,117,116, 32,118,101, 99, 52,
- 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10,  9,102,108,111, 97,116, 32, 99,109, 97,120, 44, 32, 99,109,105,110, 44, 32,
-104, 44, 32,115, 44, 32,118, 44, 32, 99,100,101,108,116, 97, 59, 13, 10,  9,118,101, 99, 51, 32, 99, 59, 13, 10, 13, 10,  9, 99,
-109, 97,120, 32, 61, 32,109, 97,120, 40,114,103, 98, 91, 48, 93, 44, 32,109, 97,120, 40,114,103, 98, 91, 49, 93, 44, 32,114,103,
- 98, 91, 50, 93, 41, 41, 59, 13, 10,  9, 99,109,105,110, 32, 61, 32,109,105,110, 40,114,103, 98, 91, 48, 93, 44, 32,109,105,110,
- 40,114,103, 98, 91, 49, 93, 44, 32,114,103, 98, 91, 50, 93, 41, 41, 59, 13, 10,  9, 99,100,101,108,116, 97, 32, 61, 32, 99,109,
- 97,120, 45, 99,109,105,110, 59, 13, 10, 13, 10,  9,118, 32, 61, 32, 99,109, 97,120, 59, 13, 10,  9,105,102, 32, 40, 99,109, 97,
-120, 33, 61, 48, 46, 48, 41, 13, 10,  9,  9,115, 32, 61, 32, 99,100,101,108,116, 97, 47, 99,109, 97,120, 59, 13, 10,  9,101,108,
-115,101, 32,123, 13, 10,  9,  9,115, 32, 61, 32, 48, 46, 48, 59, 13, 10,  9,  9,104, 32, 61, 32, 48, 46, 48, 59, 13, 10,  9,125,
- 13, 10, 13, 10,  9,105,102, 32, 40,115, 32, 61, 61, 32, 48, 46, 48, 41, 32,123, 13, 10,  9,  9,104, 32, 61, 32, 48, 46, 48, 59,
- 13, 10,  9,125, 13, 10,  9,101,108,115,101, 32,123, 13, 10,  9,  9, 99, 32, 61, 32, 40,118,101, 99, 51, 40, 99,109, 97,120, 44,
- 32, 99,109, 97,120, 44, 32, 99,109, 97,120, 41, 32, 45, 32,114,103, 98, 46,120,121,122, 41, 47, 99,100,101,108,116, 97, 59, 13,
- 10, 13, 10,  9,  9,105,102, 32, 40,114,103, 98, 46,120, 61, 61, 99,109, 97,120, 41, 32,104, 32, 61, 32, 99, 91, 50, 93, 32, 45,
- 32, 99, 91, 49, 93, 59, 13, 10,  9,  9,101,108,115,101, 32,105,102, 32, 40,114,103, 98, 46,121, 61, 61, 99,109, 97,120, 41, 32,
-104, 32, 61, 32, 50, 46, 48, 32, 43, 32, 99, 91, 48, 93, 32, 45, 32, 32, 99, 91, 50, 93, 59, 13, 10,  9,  9,101,108,115,101, 32,
-104, 32, 61, 32, 52, 46, 48, 32, 43, 32, 99, 91, 49, 93, 32, 45, 32, 99, 91, 48, 93, 59, 13, 10, 13, 10,  9,  9,104, 32, 47, 61,
- 32, 54, 46, 48, 59, 13, 10, 13, 10,  9,  9,105,102, 32, 40,104, 60, 48, 46, 48, 41, 13, 10,  9,  9,  9,104, 32, 43, 61, 32, 49,
- 46, 48, 59, 13, 10,  9,125, 13, 10, 13, 10,  9,111,117,116, 99,111,108, 32, 61, 32,118,101, 99, 52, 40,104, 44, 32,115, 44, 32,
-118, 44, 32,114,103, 98, 46,119, 41, 59, 13, 10,125, 13, 10, 13, 10,118,111,105,100, 32,104,115,118, 95,116,111, 95,114,103, 98,
- 40,118,101, 99, 52, 32,104,115,118, 44, 32,111,117,116, 32,118,101, 99, 52, 32,111,117,116, 99,111,108, 41, 13, 10,123, 13, 10,
-  9,102,108,111, 97,116, 32,105, 44, 32,102, 44, 32,112, 44, 32,113, 44, 32,116, 44, 32,104, 44, 32,115, 44, 32,118, 59, 13, 10,
-  9,118,101, 99, 51, 32,114,103, 98, 59, 13, 10, 13, 10,  9,104, 32, 61, 32,104,115,118, 91, 48, 93, 59, 13, 10,  9,115, 32, 61,
- 32,104,115,118, 91, 49, 93, 59, 13, 10,  9,118, 32, 61, 32,104,115,118, 91, 50, 93, 59, 13, 10, 13, 10,  9,105,102, 40,115, 61,
- 61, 48, 46, 48, 41, 32,123, 13, 10,  9,  9,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,118, 44, 32,118, 41, 59, 13,
- 10,  9,125, 13, 10,  9,101,108,115,101, 32,123, 13, 10,  9,  9,105,102, 40,104, 61, 61, 49, 46, 48, 41, 13, 10,  9,  9,  9,104,
- 32, 61, 32, 48, 46, 48, 59, 13, 10,  9,  9, 13, 10,  9,  9,104, 32, 42, 61, 32, 54, 46, 48, 59, 13, 10,  9,  9,105, 32, 61, 32,
-102,108,111,111,114, 40,104, 41, 59, 13, 10,  9,  9,102, 32, 61, 32,104, 32, 45, 32,105, 59, 13, 10,  9,  9,114,103, 98, 32, 61,
- 32,118,101, 99, 51, 40,102, 44, 32,102, 44, 32,102, 41, 59, 13, 10,  9,  9,112, 32, 61, 32,118, 42, 40, 49, 46, 48, 45,115, 41,
- 59, 13, 10,  9,  9,113, 32, 61, 32,118, 42, 40, 49, 46, 48, 45, 40,115, 42,102, 41, 41, 59, 13, 10,  9,  9,116, 32, 61, 32,118,
- 42, 40, 49, 46, 48, 45, 40,115, 42, 40, 49, 46, 48, 45,102, 41, 41, 41, 59, 13, 10,  9,  9, 13, 10,  9,  9,105,102, 32, 40,105,
- 32, 61, 61, 32, 48, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,116, 44, 32,112, 41, 59, 13, 10,  9,
-  9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 49, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,113,
- 44, 32,118, 44, 32,112, 41, 59, 13, 10,  9,  9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 50, 46, 48, 41, 32,114,
-103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,118, 44, 32,116, 41, 59, 13, 10,  9,  9,101,108,115,101, 32,105,102, 32, 40,
-105, 32, 61, 61, 32, 51, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,112, 44, 32,113, 44, 32,118, 41, 59, 13, 10,
-  9,  9,101,108,115,101, 32,105,102, 32, 40,105, 32, 61, 61, 32, 52, 46, 48, 41, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,
-116, 44, 32,112, 44, 32,118, 41, 59, 13, 10,  9,  9,101,108,115,101, 32,114,103, 98, 32, 61, 32,118,101, 99, 51, 40,118, 44, 32,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list