diff options
Diffstat (limited to 'indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl')
-rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl | 40 |
1 files changed, 3 insertions, 37 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl index 2d2d00cb51..642aff6c41 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl @@ -46,52 +46,18 @@ uniform mat4 inv_proj; uniform vec2 screen_res; uniform int sun_up_factor; -const float sample_count = 5; - -float cGoldenAngle = 2.39996323f; - float pcfShadow(sampler2DShadow shadowMap, vec3 norm, vec4 stc, float bias_mul, vec2 pos_screen, vec3 light_dir) { stc.xyz /= stc.w; - stc.z += shadow_bias * bias_mul * 4.0; - - float shadow = 0.0; - float cs = shadow2D(shadowMap, stc.xyz).x; - float initialTheta = cGoldenAngle*fract((pos_screen.y+pos_screen.x)*shadow_res.y); - float theta = initialTheta; - int i; - for (i = 0; i < sample_count; i++) - { - float r = float(i) / float(sample_count); - float weight = sqrt(1.0 - r); - r = sqrt(r); - vec2 sampleOffset; - sampleOffset.x = cos(theta); - sampleOffset.y = sin(theta); - sampleOffset *= r * 2.0; - float s = shadow2D(shadowMap, stc.xyz + vec3(sampleOffset, 0)).x; - shadow += weight * s; - theta += cGoldenAngle; - } - shadow /= float(sample_count); - shadow += cs; - shadow *= 0.5; - return shadow; -} - -float pcfShadowOld(sampler2DShadow shadowMap, vec3 norm, vec4 stc, float bias_mul, vec2 pos_screen, vec3 light_dir) -{ - stc.xyz /= stc.w; - - float cs = shadow2D(shadowMap, stc.xyz).x; stc.z += shadow_bias * bias_mul * 2.0; stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here - float shadow = cs; + float cs = shadow2D(shadowMap, stc.xyz).x; + float shadow = cs * 4.0; shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; - return shadow * 0.2; + return shadow * 0.125; } float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float bias_scale, vec2 pos_screen) |