commit b6d1be46e550755a732610e9ec0c500f4818baf4
Author: myconid <christofi.cos@gmail.com>
Date: Thu Nov 15 21:21:46 2012 +0200
shadowbias
diff --git a/binaries/data/mods/public/shaders/glsl/model_common.fs b/binaries/data/mods/public/shaders/glsl/model_common.fs
index 5ffe2a2..2d374f8 100644
a
|
b
|
varying vec2 v_los;
|
66 | 66 | #endif |
67 | 67 | |
68 | 68 | |
| 69 | float shadowBias = 0.004; |
69 | 70 | float get_shadow() |
70 | 71 | { |
71 | 72 | #if USE_SHADOW && !DISABLE_RECEIVE_SHADOWS |
| 73 | float biasedShdwZ = v_shadow.z - shadowBias; |
72 | 74 | #if USE_SHADOW_SAMPLER |
73 | 75 | #if USE_SHADOW_PCF |
74 | 76 | vec2 offset = fract(v_shadow.xy - 0.5); |
75 | 77 | vec4 size = vec4(offset + 1.0, 2.0 - offset); |
76 | 78 | vec4 weight = (vec4(2.0 - 1.0 / size.xy, 1.0 / size.zw - 1.0) + (v_shadow.xy - offset).xyxy) * shadowScale.zwzw; |
77 | 79 | return (1.0/9.0)*dot(size.zxzx*size.wwyy, |
78 | | vec4(shadow2D(shadowTex, vec3(weight.zw, v_shadow.z)).r, |
79 | | shadow2D(shadowTex, vec3(weight.xw, v_shadow.z)).r, |
80 | | shadow2D(shadowTex, vec3(weight.zy, v_shadow.z)).r, |
81 | | shadow2D(shadowTex, vec3(weight.xy, v_shadow.z)).r)); |
| 80 | vec4(shadow2D(shadowTex, vec3(weight.zw, biasedShdwZ)).r, |
| 81 | shadow2D(shadowTex, vec3(weight.xw, biasedShdwZ)).r, |
| 82 | shadow2D(shadowTex, vec3(weight.zy, biasedShdwZ)).r, |
| 83 | shadow2D(shadowTex, vec3(weight.xy, biasedShdwZ)).r)); |
82 | 84 | #else |
83 | | return shadow2D(shadowTex, v_shadow.xyz).r; |
| 85 | return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; |
84 | 86 | #endif |
85 | 87 | #else |
86 | | if (v_shadow.z >= 1.0) |
| 88 | if (biasedShdwZ >= 1.0) |
87 | 89 | return 1.0; |
88 | | return (v_shadow.z <= texture2D(shadowTex, v_shadow.xy).x ? 1.0 : 0.0); |
| 90 | return (biasedShdwZ < texture2D(shadowTex, v_shadow.xy).x ? 1.0 : 0.0); |
89 | 91 | #endif |
90 | 92 | #else |
91 | 93 | return 1.0; |
diff --git a/binaries/data/mods/public/shaders/glsl/terrain_common.fs b/binaries/data/mods/public/shaders/glsl/terrain_common.fs
index f54880d..a169b35 100644
a
|
b
|
varying vec3 v_normal;
|
66 | 66 | #endif |
67 | 67 | #endif |
68 | 68 | |
| 69 | float shadowBias = 0.004; |
69 | 70 | float get_shadow() |
70 | 71 | { |
71 | 72 | #if USE_SHADOW |
| 73 | float biasedShdwZ = v_shadow.z - shadowBias; |
72 | 74 | #if USE_SHADOW_SAMPLER |
73 | 75 | #if USE_SHADOW_PCF |
74 | 76 | vec2 offset = fract(v_shadow.xy - 0.5); |
75 | 77 | vec4 size = vec4(offset + 1.0, 2.0 - offset); |
76 | 78 | vec4 weight = (vec4(2.0 - 1.0 / size.xy, 1.0 / size.zw - 1.0) + (v_shadow.xy - offset).xyxy) * shadowScale.zwzw; |
77 | 79 | return (1.0/9.0)*dot(size.zxzx*size.wwyy, |
78 | | vec4(shadow2D(shadowTex, vec3(weight.zw, v_shadow.z)).r, |
79 | | shadow2D(shadowTex, vec3(weight.xw, v_shadow.z)).r, |
80 | | shadow2D(shadowTex, vec3(weight.zy, v_shadow.z)).r, |
81 | | shadow2D(shadowTex, vec3(weight.xy, v_shadow.z)).r)); |
| 80 | vec4(shadow2D(shadowTex, vec3(weight.zw, biasedShdwZ)).r, |
| 81 | shadow2D(shadowTex, vec3(weight.xw, biasedShdwZ)).r, |
| 82 | shadow2D(shadowTex, vec3(weight.zy, biasedShdwZ)).r, |
| 83 | shadow2D(shadowTex, vec3(weight.xy, biasedShdwZ)).r)); |
82 | 84 | #else |
83 | | return shadow2D(shadowTex, v_shadow.xyz).r; |
| 85 | return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; |
84 | 86 | #endif |
85 | 87 | #else |
86 | | if (v_shadow.z >= 1.0) |
| 88 | if (biasedShdwZ >= 1.0) |
87 | 89 | return 1.0; |
88 | | return (v_shadow.z <= texture2D(shadowTex, v_shadow.xy).x ? 1.0 : 0.0); |
| 90 | return (biasedShdwZ < texture2D(shadowTex, v_shadow.xy).x ? 1.0 : 0.0); |
89 | 91 | #endif |
90 | 92 | #else |
91 | 93 | return 1.0; |
diff --git a/source/renderer/ShadowMap.cpp b/source/renderer/ShadowMap.cpp
index 6c39851..3d361ae 100644
a
|
b
|
void ShadowMapInternals::CalcShadowMatrices()
|
276 | 276 | LightProjection._22 = scale.Y; |
277 | 277 | LightProjection._24 = (shift.Y + offsetY) * scale.Y; |
278 | 278 | LightProjection._33 = scale.Z; |
279 | | LightProjection._34 = shift.Z * scale.Z + renderer.m_ShadowZBias; |
| 279 | LightProjection._34 = shift.Z * scale.Z; |
280 | 280 | LightProjection._44 = 1.0; |
281 | 281 | |
282 | 282 | // Calculate texture matrix by creating the clip space to texture coordinate matrix |