Ticket #1224: shadows.diff

File shadows.diff, 4.3 KB (added by myconid, 11 years ago)
  • binaries/data/mods/public/shaders/glsl/model_common.fs

    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;  
    6666#endif
    6767
    6868
     69float shadowBias = 0.004;
    6970float get_shadow()
    7071{
    7172  #if USE_SHADOW && !DISABLE_RECEIVE_SHADOWS
     73    float biasedShdwZ = v_shadow.z - shadowBias;
    7274    #if USE_SHADOW_SAMPLER
    7375      #if USE_SHADOW_PCF
    7476        vec2 offset = fract(v_shadow.xy - 0.5);
    7577        vec4 size = vec4(offset + 1.0, 2.0 - offset);
    7678        vec4 weight = (vec4(2.0 - 1.0 / size.xy, 1.0 / size.zw - 1.0) + (v_shadow.xy - offset).xyxy) * shadowScale.zwzw;
    7779        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));
    8284      #else
    83         return shadow2D(shadowTex, v_shadow.xyz).r;
     85        return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r;
    8486      #endif
    8587    #else
    86       if (v_shadow.z >= 1.0)
     88      if (biasedShdwZ >= 1.0)
    8789        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);
    8991    #endif
    9092  #else
    9193    return 1.0;
  • binaries/data/mods/public/shaders/glsl/terrain_common.fs

    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;  
    6666  #endif
    6767#endif
    6868
     69float shadowBias = 0.004;
    6970float get_shadow()
    7071{
    7172  #if USE_SHADOW
     73    float biasedShdwZ = v_shadow.z - shadowBias;
    7274    #if USE_SHADOW_SAMPLER
    7375      #if USE_SHADOW_PCF
    7476        vec2 offset = fract(v_shadow.xy - 0.5);
    7577        vec4 size = vec4(offset + 1.0, 2.0 - offset);
    7678        vec4 weight = (vec4(2.0 - 1.0 / size.xy, 1.0 / size.zw - 1.0) + (v_shadow.xy - offset).xyxy) * shadowScale.zwzw;
    7779        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));
    8284      #else
    83         return shadow2D(shadowTex, v_shadow.xyz).r;
     85        return shadow2D(shadowTex, vec3(v_shadow.xy, biasedShdwZ)).r;
    8486      #endif
    8587    #else
    86       if (v_shadow.z >= 1.0)
     88      if (biasedShdwZ >= 1.0)
    8789        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);
    8991    #endif
    9092  #else
    9193    return 1.0;
  • source/renderer/ShadowMap.cpp

    diff --git a/source/renderer/ShadowMap.cpp b/source/renderer/ShadowMap.cpp
    index 6c39851..3d361ae 100644
    a b void ShadowMapInternals::CalcShadowMatrices()  
    276276    LightProjection._22 = scale.Y;
    277277    LightProjection._24 = (shift.Y + offsetY) * scale.Y;
    278278    LightProjection._33 = scale.Z;
    279     LightProjection._34 = shift.Z * scale.Z + renderer.m_ShadowZBias;
     279    LightProjection._34 = shift.Z * scale.Z;
    280280    LightProjection._44 = 1.0;
    281281
    282282    // Calculate texture matrix by creating the clip space to texture coordinate matrix