From ec8427da2f71c8b460725cde143e460b80a91e0f Mon Sep 17 00:00:00 2001 From: eihrul Date: Sun, 7 Feb 2010 06:56:16 +0000 Subject: [PATCH 1/1] apply bias to orthographic shadowmaps git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@9942 d7cf8633-e32d-0410-b094-e92efae38249 --- gl_rmain.c | 12 ++++++------ r_shadow.c | 18 ++++++++++-------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/gl_rmain.c b/gl_rmain.c index 633ef695..fc314d1e 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -1058,7 +1058,7 @@ static const char *builtinshaderstring = "\n" "#if defined(USESHADOWMAPRECT) || defined(USESHADOWMAP2D)\n" "# ifdef USESHADOWMAPORTHO\n" -"# define GetShadowMapTC2D(dir) (min(dir, vec3(ShadowMap_Parameters.zw, 1.0)))\n" +"# define GetShadowMapTC2D(dir) (min(dir, ShadowMap_Parameters.xyz))\n" "# else\n" "# ifdef USESHADOWMAPVSDCT\n" "vec3 GetShadowMapTC2D(vec3 dir)\n" @@ -1167,7 +1167,7 @@ static const char *builtinshaderstring = "\n" "# endif\n" "# ifdef USESHADOWMAPORTHO\n" -" return mix(ShadowMap_Parameters.x, ShadowMap_Parameters.y, f);\n" +" return mix(ShadowMap_Parameters.w, 1.0, f);\n" "# else\n" " return f;\n" "# endif\n" @@ -1234,7 +1234,7 @@ static const char *builtinshaderstring = "# endif\n" "# endif\n" "# ifdef USESHADOWMAPORTHO\n" -" return mix(ShadowMap_Parameters.x, ShadowMap_Parameters.y, f);\n" +" return mix(ShadowMap_Parameters.w, 1.0, f);\n" "# else\n" " return f;\n" "# endif\n" @@ -2216,7 +2216,7 @@ const char *builtincgshaderstring = "#if defined(MODE_LIGHTSOURCE) || defined(MODE_DEFERREDLIGHTSOURCE) || defined(USESHADOWMAPORTHO)\n" "#if defined(USESHADOWMAPRECT) || defined(USESHADOWMAP2D)\n" "# ifdef USESHADOWMAPORTHO\n" -"# define GetShadowMapTC2D(dir, ShadowMap_Parameters) (min(dir, float3(ShadowMap_Parameters.zw, 1.0)))\n" +"# define GetShadowMapTC2D(dir, ShadowMap_Parameters) (min(dir, ShadowMap_Parameters.xyz))\n" "# else\n" "# ifdef USESHADOWMAPVSDCT\n" "float3 GetShadowMapTC2D(float3 dir, float4 ShadowMap_Parameters, samplerCUBE Texture_CubeProjection)\n" @@ -2333,7 +2333,7 @@ const char *builtincgshaderstring = "\n" "# endif\n" "# ifdef USESHADOWMAPORTHO\n" -" return lerp(ShadowMap_Parameters.x, ShadowMap_Parameters.y, f);\n" +" return lerp(ShadowMap_Parameters.w, 1.0, f);\n" "# else\n" " return f;\n" "# endif\n" @@ -2404,7 +2404,7 @@ const char *builtincgshaderstring = "# endif\n" "# endif\n" "# ifdef USESHADOWMAPORTHO\n" -" return lerp(ShadowMap_Parameters.x, ShadowMap_Parameters.y, f);\n" +" return lerp(ShadowMap_Parameters.w, 1.0, f);\n" "# else\n" " return f;\n" "# endif\n" diff --git a/r_shadow.c b/r_shadow.c index 5e817fbe..1a426936 100644 --- a/r_shadow.c +++ b/r_shadow.c @@ -4234,6 +4234,7 @@ void R_Shadow_PrepareModelShadows(void) size = 2*r_shadow_shadowmapmaxsize; scale = r_shadow_shadowmapping_precision.value; radius = 0.5f * size / scale; + Math_atov(r_shadows_throwdirection.string, shadowdir); VectorNormalize(shadowdir); dot1 = DotProduct(r_refdef.view.forward, shadowdir); @@ -4274,7 +4275,7 @@ void R_Shadow_PrepareModelShadows(void) void R_DrawModelShadowMaps(void) { int i; - float relativethrowdistance, scale, size, radius, nearclip, farclip, dot1, dot2; + float relativethrowdistance, scale, size, radius, nearclip, farclip, bias, dot1, dot2; entity_render_t *ent; vec3_t relativelightorigin; vec3_t relativelightdirection, relativeforward, relativeright; @@ -4325,16 +4326,17 @@ void R_DrawModelShadowMaps(void) } size = 2*r_shadow_shadowmapmaxsize; - - r_shadow_shadowmap_parameters[0] = bound(0.0f, 1.0f - r_shadows_darken.value, 1.0f); - r_shadow_shadowmap_parameters[1] = 1.0f; - r_shadow_shadowmap_parameters[2] = size; - r_shadow_shadowmap_parameters[3] = size; - scale = r_shadow_shadowmapping_precision.value / size; radius = 0.5f / scale; nearclip = -r_shadows_throwdistance.value; farclip = r_shadows_throwdistance.value; + bias = r_shadow_shadowmapping_bias.value * r_shadow_shadowmapping_nearclip.value / (2 * r_shadows_throwdistance.value) * (1024.0f / size); + + r_shadow_shadowmap_parameters[0] = size; + r_shadow_shadowmap_parameters[1] = size; + r_shadow_shadowmap_parameters[2] = 1.0; + r_shadow_shadowmap_parameters[3] = bound(0.0f, 1.0f - r_shadows_darken.value, 1.0f); + Math_atov(r_shadows_throwdirection.string, shadowdir); VectorNormalize(shadowdir); Math_atov(r_shadows_focus.string, shadowfocus); @@ -4416,7 +4418,7 @@ void R_DrawModelShadowMaps(void) Matrix4x4_Concat(&mvpmatrix, &r_refdef.view.viewport.projectmatrix, &r_refdef.view.viewport.viewmatrix); Matrix4x4_Invert_Full(&invmvpmatrix, &mvpmatrix); Matrix4x4_CreateScale3(&scalematrix, size, -size, 1); - Matrix4x4_AdjustOrigin(&scalematrix, 0, size, 0); + Matrix4x4_AdjustOrigin(&scalematrix, 0, size, -0.5f * bias); Matrix4x4_Concat(&texmatrix, &scalematrix, &shadowmatrix); Matrix4x4_Concat(&r_shadow_shadowmapmatrix, &texmatrix, &invmvpmatrix); -- 2.39.2