update( camera, blendWindow = 100, blurEdges = true ) {

			if ( this.blurringPlane == null ) {

				return;

			} // Store the original Render Target


			const oldTarget = this.renderer.getRenderTarget(); // The blurring plane applies blur to the seams of the lightmap

			this.blurringPlane.visible = blurEdges; // Steal the Object3D from the real world to our special dimension

			for ( let l = 0; l < this.lightMapContainers.length; l ++ ) {

				this.lightMapContainers[ l ].object.oldScene = this.lightMapContainers[ l ].object.parent;
				this.scene.attach( this.lightMapContainers[ l ].object );

			} // Render once normally to initialize everything


			if ( this.firstUpdate ) {

				this.renderer.setRenderTarget( this.tinyTarget ); // Tiny for Speed

				this.renderer.render( this.scene, camera );
				this.firstUpdate = false;

			} // Set each object's material to the UV Unwrapped Surface Mapping Version


			for ( let l = 0; l < this.lightMapContainers.length; l ++ ) {

				this.uvMat.uniforms.averagingWindow = {
					value: blendWindow
				};
				this.lightMapContainers[ l ].object.material = this.uvMat;
				this.lightMapContainers[ l ].object.oldFrustumCulled = this.lightMapContainers[ l ].object.frustumCulled;
				this.lightMapContainers[ l ].object.frustumCulled = false;

			} // Ping-pong two surface buffers for reading/writing


			const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;
			const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1; // Render the object's surface maps

			this.renderer.setRenderTarget( activeMap );
			this.uvMat.uniforms.previousShadowMap = {
				value: inactiveMap.texture
			};
			this.blurringPlane.material.uniforms.previousShadowMap = {
				value: inactiveMap.texture
			};
			this.buffer1Active = ! this.buffer1Active;
			this.renderer.render( this.scene, camera ); // Restore the object's Real-time Material and add it back to the original world

			for ( let l = 0; l < this.lightMapContainers.length; l ++ ) {

				this.lightMapContainers[ l ].object.frustumCulled = this.lightMapContainers[ l ].object.oldFrustumCulled;
				this.lightMapContainers[ l ].object.material = this.lightMapContainers[ l ].basicMat;
				this.lightMapContainers[ l ].object.oldScene.attach( this.lightMapContainers[ l ].object );

			} // Restore the original Render Target


			this.renderer.setRenderTarget( oldTarget );

		}
This function renders each mesh one at a time into their respective surface maps
@param {Camera} camera Standard Rendering Camera
@param {number} blendWindow When >1, samples will accumulate over time.
@param {boolean} blurEdges  Whether to fix UV Edges via blurring