Ticket #5124: shadow_filter.patch
File shadow_filter.patch, 3.8 KB (added by , 6 years ago) |
---|
-
binaries/data/mods/public/shaders/glsl/model_common.fs
26 26 #endif 27 27 #endif 28 28 29 #if USE_SHADOW_PCF 30 uniform vec2 offsets[8] = vec2[]( 31 vec2(-0.353553, 0.612372), 32 vec2(-0.25, -0.433013), 33 vec2(0.663414, 0.55667), 34 vec2(-0.332232, 0.120922), 35 vec2(0.137281, -0.778559), 36 vec2(0.106337, 0.603069), 37 vec2(-0.879002, -0.319931), 38 vec2(0.191511, -0.160697) 39 ); 40 #endif 41 29 42 uniform vec3 shadingColor; 30 43 uniform vec3 ambient; 31 44 uniform vec3 sunColor; … … 72 85 float biasedShdwZ = v_shadow.z - shadowBias; 73 86 #if USE_SHADOW_SAMPLER 74 87 #if USE_SHADOW_PCF 75 vec2 offset = fract(v_shadow.xy - 0.5); 76 vec4 size = vec4(offset + 1.0, 2.0 - offset); 77 vec4 weight = (vec4(1.0, 1.0, -0.5, -0.5) + (v_shadow.xy - 0.5*offset).xyxy) * shadowScale.zwzw; 78 return (1.0/9.0)*dot(size.zxzx*size.wwyy, 79 vec4(shadow2D(shadowTex, vec3(weight.zw, biasedShdwZ)).r, 80 shadow2D(shadowTex, vec3(weight.xw, biasedShdwZ)).r, 81 shadow2D(shadowTex, vec3(weight.zy, biasedShdwZ)).r, 82 shadow2D(shadowTex, vec3(weight.xy, biasedShdwZ)).r)); 83 #else 84 return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; 85 #endif 88 float lit = 0.0; 89 vec2 uv = v_shadow.xy - (0.5 * fract(v_shadow.xy - 0.5)); 90 float blurRadius = 2.5; 91 92 for (int i = 0; i < 8; i++){ 93 vec2 offset = (uv + offsets[i] * blurRadius) * shadowScale.zw; 94 lit += shadow2D(shadowTex, vec3(offset, biasedShdwZ)).r; 95 } 96 97 return lit/8.0; 98 #else 99 return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; 100 #endif 86 101 #else 87 102 if (biasedShdwZ >= 1.0) 88 103 return 1.0; -
binaries/data/mods/public/shaders/glsl/terrain_common.fs
64 64 #endif 65 65 #endif 66 66 67 #if USE_SHADOW_PCF 68 uniform vec2 offsets[8] = vec2[]( 69 vec2(-0.353553, 0.612372), 70 vec2(-0.25, -0.433013), 71 vec2(0.663414, 0.55667), 72 vec2(-0.332232, 0.120922), 73 vec2(0.137281, -0.778559), 74 vec2(0.106337, 0.603069), 75 vec2(-0.879002, -0.319931), 76 vec2(0.191511, -0.160697) 77 ); 78 #endif 79 67 80 float get_shadow() 68 81 { 69 82 float shadowBias = 0.0005; … … 70 83 #if USE_SHADOW && !DISABLE_RECEIVE_SHADOWS 71 84 float biasedShdwZ = v_shadow.z - shadowBias; 72 85 #if USE_SHADOW_SAMPLER 73 #if USE_SHADOW_PCF 74 vec2 offset = fract(v_shadow.xy - 0.5); 75 vec4 size = vec4(offset + 1.0, 2.0 - offset); 76 vec4 weight = (vec4(1.0, 1.0, -0.5, -0.5) + (v_shadow.xy - 0.5*offset).xyxy) * shadowScale.zwzw; 77 return (1.0/9.0)*dot(size.zxzx*size.wwyy, 78 vec4(shadow2D(shadowTex, vec3(weight.zw, biasedShdwZ)).r, 79 shadow2D(shadowTex, vec3(weight.xw, biasedShdwZ)).r, 80 shadow2D(shadowTex, vec3(weight.zy, biasedShdwZ)).r, 81 shadow2D(shadowTex, vec3(weight.xy, biasedShdwZ)).r)); 82 #else 83 return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; 84 #endif 86 #if USE_SHADOW_PCF 87 float lit = 0.0; 88 vec2 uv = v_shadow.xy - (0.5 * fract(v_shadow.xy - 0.5)); 89 float blurRadius = 2.5; 90 91 for (int i = 0; i < 8; i++){ 92 vec2 offset = (uv + offsets[i] * blurRadius) * shadowScale.zw; 93 lit += shadow2D(shadowTex, vec3(offset, biasedShdwZ)).r; 94 } 95 96 return lit/8.0; 97 #else 98 return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r; 99 #endif 85 100 #else 86 101 if (biasedShdwZ >= 1.0) 87 102 return 1.0;