[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