diff --git a/projects/voxelization/resources/shaders/shadowMapping.inc b/projects/voxelization/resources/shaders/shadowMapping.inc
index c97e0b81492633175f5419495b29f94db99df0a1..8f14d35ddba55dc55f1aa90896373feb628d40fe 100644
--- a/projects/voxelization/resources/shaders/shadowMapping.inc
+++ b/projects/voxelization/resources/shaders/shadowMapping.inc
@@ -35,7 +35,7 @@ float ComputeMSMShadowIntensity(vec4 _4Moments, float FragmentDepth, float Depth
     	vec4(0.0));
     float Quotient=(Switch[0]*z[2]-b[0]*(Switch[0]+z[2])+b[1])
                   /((z[2]-Switch[1])*(z[0]-z[1]));
-    return clamp(Switch[2]+Switch[3]*Quotient, 0, 1);
+    return 1-clamp(Switch[2]+Switch[3]*Quotient, 0, 1);
 }
 
 vec4 quantizeMoments(vec4 moments){
@@ -59,6 +59,16 @@ vec4 unquantizeMoments(vec4 moments){
     return T * moments;
 }
 
+float rescaleRange(float a, float b, float v)
+{
+    return clamp((v - a) / (b - a), 0, 1);
+}
+
+float reduceLightBleeding(float shadow, float amount)
+{
+   return rescaleRange(amount, 1.0f, shadow);
+}
+
 float shadowTest(vec3 worldPos, LightInfo lightInfo, texture2D shadowMap, sampler shadowMapSampler, vec2 offset){
     vec4 lightPos = lightInfo.lightMatrix * vec4(worldPos, 1);
     lightPos /= lightPos.w;
@@ -78,7 +88,8 @@ float shadowTest(vec3 worldPos, LightInfo lightInfo, texture2D shadowMap, sample
     float depthBias     = 0.f;
     float momentBias    = 0.00005;
     
-    return 1-ComputeMSMShadowIntensity(shadowMapSample, lightPos.z, depthBias, momentBias);
+    float shadow = ComputeMSMShadowIntensity(shadowMapSample, lightPos.z, depthBias, momentBias);
+    return reduceLightBleeding(shadow, 0.1f);
 }
 
 #endif // #ifndef SHADOW_MAPPING_INC
\ No newline at end of file