 				dimension
 			);
 			
-			var depth						: SFloat	= sampleTexture(depthMap, uv);
-			var moment1						: SFloat	= unpackHalf(depth.xy);
-			var moment2						: SFloat	= unpackHalf(depth.zw);
+			var depth						: SFloat	= _depthShaderPart.getDepthForAttenuation(lightId, worldPosition);
+			var precomputedDepth			: SFloat	= sampleTexture(depthMap, uv);
+			var moment1						: SFloat	= unpackHalf(precomputedDepth.xy);
+			var moment2						: SFloat	= unpackHalf(precomputedDepth.zw);
 			var lightBleedingCorrection		: Function	= doNotReduceLightBleeding;
-			var lightBleedingInterpolation	: uint		= getLightConstant(lightId, 'lightBleedingInterpolation', 0);
+			var lightBleedingInterpolation	: uint		= getLightConstant(
+				lightId,
+				'lightBleedingInterpolation',
+				LightBleedingInterpolation.NONE
+			);
 			switch (lightBleedingInterpolation)
 			{
 				case LightBleedingInterpolation.LINSTEP :

			var lightBleedingBias			: SFloat	= getLightParameter(lightId, 'lightBleedingBias', 1);
			var shadow						: SFloat	= chebyshevUpperBound(
				float2(moment1, moment2),
				uv.w,
				lightBleedingCorrection,
				lightBleedingBias
			);

		
		private function reduceLightBleedingWithSmoothstep(pMax : SFloat, amount : SFloat) : SFloat
		{
			return smoothstep(amount, 1.0, pMax);
		}
		
		public function getAttenuation(lightId : uint) : SFloat
