setFromProjectionMatrix( projectionMatrix, maxFar ) {

		const zNear = this.zNear;
		const isOrthographic = projectionMatrix.elements[ 2 * 4 + 3 ] === 0;

		inverseProjectionMatrix.copy( projectionMatrix ).invert();

		// 3 --- 0  vertices.near/far order
		// |     |
		// 2 --- 1
		// clip space spans from [-1, 1]

		this.vertices.near[ 0 ].set( 1, 1, zNear );
		this.vertices.near[ 1 ].set( 1, - 1, zNear );
		this.vertices.near[ 2 ].set( - 1, - 1, zNear );
		this.vertices.near[ 3 ].set( - 1, 1, zNear );
		this.vertices.near.forEach( function ( v ) {

			v.applyMatrix4( inverseProjectionMatrix );

		} );

		this.vertices.far[ 0 ].set( 1, 1, 1 );
		this.vertices.far[ 1 ].set( 1, - 1, 1 );
		this.vertices.far[ 2 ].set( - 1, - 1, 1 );
		this.vertices.far[ 3 ].set( - 1, 1, 1 );
		this.vertices.far.forEach( function ( v ) {

			v.applyMatrix4( inverseProjectionMatrix );

			const absZ = Math.abs( v.z );
			if ( isOrthographic ) {

				v.z *= Math.min( maxFar / absZ, 1.0 );

			} else {

				v.multiplyScalar( Math.min( maxFar / absZ, 1.0 ) );

			}

		} );

		return this.vertices;

	}
Setups this CSM frustum from the given projection matrix and max far value.

@param {Matrix4} projectionMatrix - The projection matrix, usually of the scene's camera.
@param {number} maxFar - The maximum far value.
@returns {Object} An object representing the vertices of the near and far plane in view space.