// #define SHADOW_DISTORT_FACTOR 0.105 //Distortion factor for the shadow map. Has no effect when shadow distortion is disabled. [0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.10 0.11 0.12 0.13 0.14 0.15 0.16 0.17 0.18 0.19 0.20 0.21 0.22 0.23 0.24 0.25 0.26 0.27 0.28 0.29 0.30 0.31 0.32 0.33 0.34 0.35 0.36 0.37 0.38 0.39 0.40 0.41 0.42 0.43 0.44 0.45 0.46 0.47 0.48 0.49 0.50 0.51 0.52 0.53 0.54 0.55 0.56 0.57 0.58 0.59 0.60 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.68 0.69 0.70 0.71 0.72 0.73 0.74 0.75 0.76 0.77 0.78 0.79 0.80 0.81 0.82 0.83 0.84 0.85 0.86 0.87 0.88 0.89 0.90 0.91 0.92 0.93 0.94 0.95 0.96 0.97 0.98 0.99 1.00]
// #define Shadow_Distortion_Bias 0.006 //Increase this if you get shadow acne. Decrease this if you get peter panning. [0.000 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010 0.012 0.014 0.016 0.018 0.020 0.022 0.024 0.026 0.028 0.030 0.035 0.040 0.045 0.050]
#define Shadow_Distortion_Bias 0.85
#define Shadow_Z_Stretch 0.2


float distortionFactor(vec2 shadowSpace) {
    float dist = length((shadowSpace * 1.169));
    return (1.0 - Shadow_Distortion_Bias) + dist * Shadow_Distortion_Bias;
}

const float shadowmapBias   = 0.08 * (2048.0 / shadowMapResolution);

float calcShadowBias(vec2 shadowSpace) {
    // shadowSpace = shadowSpace * 2.0 - 1.0;
    // float k = distortionFactor(shadowSpace);
    // // float dist = length(abs(shadowSpace * 1.165));
    // return 0.0013*k;
    return shadowmapBias*0.001;
}

vec3 distortShadowSpace(vec3 shadowSpace) {
    shadowSpace = shadowSpace * 2.0 - 1.0;
    shadowSpace.xy = shadowSpace.xy / distortionFactor(shadowSpace.xy);//vec3(vec2(distortionFactor(shadowSpace.xy)), Shadow_Z_Stretch);
    shadowSpace.z *= Shadow_Z_Stretch;
    shadowSpace = shadowSpace * 0.5 + 0.5;

    return shadowSpace;
}