[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42620] branches/ge_harmony: VSM updates:

Mitchell Stokes mogurijin at gmail.com
Wed Dec 14 02:02:29 CET 2011


Revision: 42620
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42620
Author:   moguri
Date:     2011-12-14 01:02:19 +0000 (Wed, 14 Dec 2011)
Log Message:
-----------
VSM updates:
  * Bleed bias and bias are now settable in the UI
  * The algorithm (simple versus variance) is now settable in the UI
  * The builtin shaders are now being properly freed

Modified Paths:
--------------
    branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py
    branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c
    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
    branches/ge_harmony/source/blender/makesdna/DNA_lamp_types.h
    branches/ge_harmony/source/blender/makesrna/intern/rna_lamp.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-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/release/scripts/startup/bl_ui/properties_data_lamp.py	2011-12-14 01:02:19 UTC (rev 42620)
@@ -218,10 +218,14 @@
         col.prop(lamp, "use_only_shadow")
     
         col = layout.column()
+        col.label("Algorithm:")
+        col.prop(lamp, "shadow_map_type", text="", toggle=True)
         col.label("Quality:")
         col = layout.column(align=True)
         col.prop(lamp, "shadow_buffer_size", text="Size")
         col.prop(lamp, "shadow_buffer_bias", text="Bias")
+        col.prop(lamp, "shadow_buffer_bleed_bias", text="Bleed Bias")
+		
         
         row = layout.row()
         row.label("Clipping:")

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c	2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_codegen.c	2011-12-14 01:02:19 UTC (rev 42620)
@@ -248,6 +248,9 @@
 		BLI_ghash_free(FUNCTION_HASH, NULL, (GHashValFreeFP)MEM_freeN);
 		FUNCTION_HASH = NULL;
 	}
+
+	GPU_shader_free_builtin_shader(GPU_SHADER_VSM_STORE);
+	GPU_shader_free_builtin_shader(GPU_SHADER_SEP_GAUSSIAN_BLUR);
 	/*if(FUNCTION_PROTOTYPES) {
 		MEM_freeN(FUNCTION_PROTOTYPES);
 		FUNCTION_PROTOTYPES = NULL;

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c	2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_extensions.c	2011-12-14 01:02:19 UTC (rev 42620)
@@ -1279,8 +1279,10 @@
 	{
 	case GPU_SHADER_VSM_STORE:
 		s = &GG.shaders.vsm_store;
+		break;
 	case GPU_SHADER_SEP_GAUSSIAN_BLUR:
 		s = &GG.shaders.sep_gaussian_blur;
+		break;
 	default:
 		s = NULL;
 	}

Modified: branches/ge_harmony/source/blender/gpu/intern/gpu_material.c
===================================================================
--- branches/ge_harmony/source/blender/gpu/intern/gpu_material.c	2011-12-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_material.c	2011-12-14 01:02:19 UTC (rev 42620)
@@ -711,19 +711,19 @@
 		if(!(mat->scene->gm.flag & GAME_GLSL_NO_SHADOWS)) {
 			mat->dynproperty |= DYN_LAMP_PERSMAT;
 			
-#if 0
-			GPU_link(mat, "test_shadowbuf",
-				GPU_builtin(GPU_VIEW_POSITION),
-				GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
-				GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
-				GPU_uniform(&lamp->bias), inp, &shadfac);
-#else
-			GPU_link(mat, "test_shadowbuf_vsm",
-				GPU_builtin(GPU_VIEW_POSITION),
-				GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
-				GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
-				GPU_uniform(&lamp->bias), inp, &shadfac);
-#endif
+			if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+				GPU_link(mat, "test_shadowbuf_vsm",
+					GPU_builtin(GPU_VIEW_POSITION),
+					GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
+					GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
+					GPU_uniform(&lamp->bias), GPU_uniform(&lamp->la->bleedbias), inp, &shadfac);
+			} else {
+				GPU_link(mat, "test_shadowbuf",
+					GPU_builtin(GPU_VIEW_POSITION),
+					GPU_dynamic_texture(lamp->tex, GPU_DYNAMIC_SAMPLER_2DSHADOW, lamp->ob),
+					GPU_dynamic_uniform((float*)lamp->dynpersmat, GPU_DYNAMIC_LAMP_DYNPERSMAT, lamp->ob),
+					GPU_uniform(&lamp->bias), inp, &shadfac);
+			}
 			
 			if(lamp->mode & LA_ONLYSHADOW) {
 				GPU_link(mat, "shade_only_shadow", i, shadfac,
@@ -1651,7 +1651,10 @@
 		}
 
 		/* Shadow color map */
-		lamp->tex = GPU_texture_create_shadow_map(lamp->size, NULL);
+		if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE)
+			lamp->tex = GPU_texture_create_shadow_map(lamp->size, NULL);
+		else
+			lamp->tex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
 		if(!lamp->tex) {
 			gpu_lamp_shadow_free(lamp);
 			return lamp;
@@ -1662,34 +1665,36 @@
 			return lamp;
 		}
 
-		/* Shadow depth map */
-		lamp->depthtex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
-		if(!lamp->depthtex) {
-			gpu_lamp_shadow_free(lamp);
-			return lamp;
-		}
+		if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+			/* Shadow depth map */
+			lamp->depthtex = GPU_texture_create_depth(lamp->size, lamp->size, NULL);
+			if(!lamp->depthtex) {
+				gpu_lamp_shadow_free(lamp);
+				return lamp;
+			}
 		
-		if(!GPU_framebuffer_texture_attach(lamp->fb, lamp->depthtex, NULL)) {
-			gpu_lamp_shadow_free(lamp);
-			return lamp;
-		}
+			if(!GPU_framebuffer_texture_attach(lamp->fb, lamp->depthtex, NULL)) {
+				gpu_lamp_shadow_free(lamp);
+				return lamp;
+			}
 
-		/* FBO and texture for blurring */
-		lamp->blurfb = GPU_framebuffer_create();
-		if(!lamp->blurfb) {
-			gpu_lamp_shadow_free(lamp);
-			return lamp;
-		}
+			/* FBO and texture for blurring */
+			lamp->blurfb = GPU_framebuffer_create();
+			if(!lamp->blurfb) {
+				gpu_lamp_shadow_free(lamp);
+				return lamp;
+			}
 
-		lamp->blurtex = GPU_texture_create_shadow_map(lamp->size*0.5, NULL);
-		if(!lamp->blurtex) {
-			gpu_lamp_shadow_free(lamp);
-			return lamp;
-		}
+			lamp->blurtex = GPU_texture_create_shadow_map(lamp->size*0.5, NULL);
+			if(!lamp->blurtex) {
+				gpu_lamp_shadow_free(lamp);
+				return lamp;
+			}
 		
-		if(!GPU_framebuffer_texture_attach(lamp->blurfb, lamp->blurtex, NULL)) {
-			gpu_lamp_shadow_free(lamp);
-			return lamp;
+			if(!GPU_framebuffer_texture_attach(lamp->blurfb, lamp->blurtex, NULL)) {
+				gpu_lamp_shadow_free(lamp);
+				return lamp;
+			}
 		}
 
 
@@ -1770,7 +1775,8 @@
 	glDisable(GL_SCISSOR_TEST);
 	GPU_framebuffer_texture_bind(lamp->fb, lamp->tex,
 		GPU_texture_opengl_width(lamp->tex), GPU_texture_opengl_height(lamp->tex));
-	GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
+	if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE)
+		GPU_shader_bind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
 
 	/* set matrices */
 	copy_m4_m4(viewmat, lamp->viewmat);
@@ -1780,8 +1786,11 @@
 
 void GPU_lamp_shadow_buffer_unbind(GPULamp *lamp)
 {
-	GPU_shader_unbind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
-	GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, lamp->blurtex);
+	if(lamp->la->shadowmap_type == LA_SHADMAP_VARIANCE) {
+		GPU_shader_unbind(GPU_shader_get_builtin_shader(GPU_SHADER_VSM_STORE));
+		GPU_framebuffer_blur(lamp->fb, lamp->tex, lamp->blurfb, lamp->blurtex);
+	}
+
 	GPU_framebuffer_texture_unbind(lamp->fb, lamp->tex);
 	GPU_framebuffer_restore();
 	glEnable(GL_SCISSOR_TEST);

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-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl	2011-12-14 01:02:19 UTC (rev 42620)
@@ -1789,7 +1789,7 @@
 	}
 }
 
-void test_shadowbuf_vsm(vec3 rco, sampler2D shadowmap, mat4 shadowpersmat, float shadowbias, float inp, out float result)
+void test_shadowbuf_vsm(vec3 rco, sampler2D shadowmap, mat4 shadowpersmat, float shadowbias, float bleedbias, float inp, out float result)
 {
 	if(inp <= 0.0) {
 		result = 0.0;
@@ -1804,15 +1804,13 @@
 			p = 1.0;
 
 		float variance = moments.y - (moments.x*moments.x);
-		variance = max(variance, 0.1/10.0);
+		variance = max(variance, shadowbias/10.0);
 
 		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]
-		// XXX this x value should be user settable
-		float x = shadowbias*20.0;
-		p_max = clamp((p_max-x)/(1.0-x), 0, 1);
+		p_max = clamp((p_max-bleedbias)/(1.0-bleedbias), 0, 1);
 
 		result = max(p, p_max);
 	}

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-14 00:43:42 UTC (rev 42619)
+++ branches/ge_harmony/source/blender/gpu/intern/gpu_shader_material.glsl.c	2011-12-14 01:02:19 UTC (rev 42620)
@@ -1,1318 +1,1317 @@
 /* DataToC output of file <gpu_shader_material_glsl> */
 
-int datatoc_gpu_shader_material_glsl_size= 50029;
+int datatoc_gpu_shader_material_glsl_size= 49992;
 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,

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list