 	#endif
 
 	#if defined( SHADOWMAP_TYPE_PCSS )
+		#define PCSS_QUALITY_LEVEL 1
 		#define PCSS_NUM_POISSON_SAMPLES 16
-		#define PCSS_ROTATE_POISSON_SAMPLES 1
 
 		#define LIGHT_FRUSTUM_WIDTH 3.75 // remove me
 

			return blockerDepthSum / float( numBlockers );
		}

		float percentCloserFilter( sampler2D shadowMap, vec2 uv, float zReceiverClipSpace, float filterRadius ) {
			float sum = 0.0;

			for( int i = 0; i < PCSS_NUM_POISSON_SAMPLES; i ++ ) {

				vec2 offset = poissonDisk[i] * filterRadius;

				float depth1 = unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) );
				if( zReceiverClipSpace <= depth1 ) sum += 1.0;

				float depth2 = unpackRGBAToDepth( texture2D( shadowMap, uv - offset.yx ) );
				if( zReceiverClipSpace <= depth2 ) sum += 1.0;

			}

			return sum / ( 2.0 * float( PCSS_NUM_POISSON_SAMPLES ) );
		}

		float percentCloserSoftShadow( sampler2D shadowMap, const in float shadowRadius, const in vec2 shadowCameraNearFar, const in vec4 coords ) {

			float blockerDepthSum = 0.0;
			int numBlockers = 0;

			for( int j = 0; j < PCSS_QUALITY_LEVEL; j ++ ) {

				mat2 poissonRotation = createRotationMatrix( uv + vec2( 0.33, 0.66 ) * float( j ) );

				for( int i = 0; i < PCSS_NUM_POISSON_SAMPLES; i++ ) {

					vec2 uvOffset = ( poissonDisk[i] * poissonRotation ) * searchRadius;

					float shadowMapDepth = unpackRGBAToDepth( texture2D( shadowMap, uv + uvOffset ) );
					if ( shadowMapDepth < zReceiverClipSpace ) {
						blockerDepthSum += shadowMapDepth;
						numBlockers ++;
					}

				}

			}
