Browse Source

Updated builds.

Mr.doob 9 năm trước cách đây
mục cha
commit
f38485286f
3 tập tin đã thay đổi với 237 bổ sung127 xóa
  1. 120 16
      build/three.js
  2. 116 111
      build/three.min.js
  3. 1 0
      utils/build/externs/common.js

+ 120 - 16
build/three.js

@@ -274,6 +274,7 @@ THREE.LuminanceFormat = 1022;
 THREE.LuminanceAlphaFormat = 1023;
 // THREE.RGBEFormat handled as THREE.RGBAFormat in shaders
 THREE.RGBEFormat = THREE.RGBAFormat; //1024;
+THREE.DepthFormat = 1026;
 
 // DDS / ST3C Compressed texture formats
 
@@ -22172,6 +22173,31 @@ THREE.EventDispatcher.prototype.apply( THREE.Texture.prototype );
 
 THREE.TextureIdCount = 0;
 
+// File:src/textures/DepthTexture.js
+
+/**
+ * @author Matt DesLauriers / @mattdesl
+ */
+
+THREE.DepthTexture = function ( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy ) {
+
+  THREE.Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, THREE.DepthFormat, type, anisotropy );
+
+  this.image = { width: width, height: height };
+
+  this.type = type !== undefined ? type : THREE.UnsignedShortType;
+
+  this.magFilter = magFilter !== undefined ? magFilter : THREE.NearestFilter;
+  this.minFilter = minFilter !== undefined ? minFilter : THREE.NearestFilter;
+
+  this.flipY = false;
+  this.generateMipmaps  = false;
+
+};
+
+THREE.DepthTexture.prototype = Object.create( THREE.Texture.prototype );
+THREE.DepthTexture.prototype.constructor = THREE.DepthTexture;
+
 // File:src/textures/CanvasTexture.js
 
 /**
@@ -24981,8 +25007,10 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	}
 
+	var _isWebGL2 = (typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext);
 	var extensions = new THREE.WebGLExtensions( _gl );
 
+	extensions.get( 'WEBGL_depth_texture' );
 	extensions.get( 'OES_texture_float' );
 	extensions.get( 'OES_texture_float_linear' );
 	extensions.get( 'OES_texture_half_float' );
@@ -25345,23 +25373,33 @@ THREE.WebGLRenderer = function ( parameters ) {
 		var renderTargetProperties = properties.get( renderTarget );
 		var textureProperties = properties.get( renderTarget.texture );
 
-		if ( ! renderTarget || textureProperties.__webglTexture === undefined ) return;
+		if ( ! renderTarget ) return;
+
+		if ( textureProperties.__webglTexture !== undefined ) {
 
-		_gl.deleteTexture( textureProperties.__webglTexture );
+			_gl.deleteTexture( textureProperties.__webglTexture );
+
+		}
+
+		if ( renderTarget.depthTexture ) {
+
+			renderTarget.depthTexture.dispose();
+
+		}
 
 		if ( renderTarget instanceof THREE.WebGLRenderTargetCube ) {
 
 			for ( var i = 0; i < 6; i ++ ) {
 
 				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
-				_gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
+				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
 
 			}
 
 		} else {
 
 			_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
-			_gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
+			if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
 
 		}
 
@@ -27877,7 +27915,27 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		var mipmap, mipmaps = texture.mipmaps;
 
-		if ( texture instanceof THREE.DataTexture ) {
+		if ( texture instanceof THREE.DepthTexture ) {
+
+			// populate depth texture with dummy data
+
+			var internalFormat = _gl.DEPTH_COMPONENT;
+
+			if ( texture.type === THREE.FloatType ) {
+
+				if ( !_isWebGL2 ) throw new Error('Float Depth Texture only supported in WebGL2.0');
+				internalFormat = _gl.DEPTH_COMPONENT32F;
+
+			} else if ( _isWebGL2 ) {
+
+				// WebGL 2.0 requires signed internalformat for glTexImage2D
+				internalFormat = _gl.DEPTH_COMPONENT16;
+
+			}
+
+			state.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );
+
+		} else if ( texture instanceof THREE.DataTexture ) {
 
 			// use manually created mipmaps if available
 			// if there are no manual mipmaps
@@ -28219,6 +28277,36 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	}
 
+	// Setup resources for a Depth Texture for a FBO (needs an extension)
+	function setupDepthTexture ( framebuffer, renderTarget ) {
+
+		var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );
+		if ( isCube ) throw new Error('Depth Texture with cube render targets is not supported!');
+
+		_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
+
+		if ( !( renderTarget.depthTexture instanceof THREE.DepthTexture ) ) {
+
+			throw new Error('renderTarget.depthTexture must be an instance of THREE.DepthTexture');
+
+		}
+
+		// upload an empty depth texture with framebuffer size
+		if ( !properties.get( renderTarget.depthTexture ).__webglTexture ||
+				renderTarget.depthTexture.image.width !== renderTarget.width ||
+				renderTarget.depthTexture.image.height !== renderTarget.height ) {
+			renderTarget.depthTexture.image.width = renderTarget.width;
+			renderTarget.depthTexture.image.height = renderTarget.height;
+			renderTarget.depthTexture.needsUpdate = true;
+		}
+
+		_this.setTexture( renderTarget.depthTexture, 0 );
+
+		var webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
+		_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
+
+	}
+
 	// Setup GL resources for a non-texture depth buffer
 	function setupDepthRenderbuffer( renderTarget ) {
 
@@ -28226,23 +28314,33 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		var isCube = ( renderTarget instanceof THREE.WebGLRenderTargetCube );
 
-		if ( isCube ) {
+		if ( renderTarget.depthTexture ) {
 
-			renderTargetProperties.__webglDepthbuffer = [];
+			if ( isCube ) throw new Error('target.depthTexture not supported in Cube render targets');
 
-			for ( var i = 0; i < 6; i ++ ) {
+			setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );
 
-				_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
-				renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
-				setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );
+		} else {
 
-			}
+			if ( isCube ) {
 
-		} else {
+				renderTargetProperties.__webglDepthbuffer = [];
+
+				for ( var i = 0; i < 6; i ++ ) {
 
-			_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
-			renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
-			setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );
+					_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
+					renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
+					setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );
+
+				}
+
+			} else {
+
+				_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
+				renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
+				setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );
+
+			}
 
 		}
 
@@ -28527,6 +28625,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 		if ( p === THREE.RGBAFormat ) return _gl.RGBA;
 		if ( p === THREE.LuminanceFormat ) return _gl.LUMINANCE;
 		if ( p === THREE.LuminanceAlphaFormat ) return _gl.LUMINANCE_ALPHA;
+		if ( p === THREE.DepthFormat ) return _gl.DEPTH_COMPONENT;
 
 		if ( p === THREE.AddEquation ) return _gl.FUNC_ADD;
 		if ( p === THREE.SubtractEquation ) return _gl.FUNC_SUBTRACT;
@@ -28623,6 +28722,7 @@ THREE.WebGLRenderTarget = function ( width, height, options ) {
 
 	this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;
 	this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;
+	this.depthTexture = null;
 
 };
 
@@ -28663,6 +28763,7 @@ THREE.WebGLRenderTarget.prototype = {
 
 		this.depthBuffer = source.depthBuffer;
 		this.stencilBuffer = source.stencilBuffer;
+		this.depthTexture = source.depthTexture;
 
 		return this;
 
@@ -28854,6 +28955,9 @@ THREE.WebGLExtensions = function ( gl ) {
 
 		switch ( name ) {
 
+			case 'WEBGL_depth_texture':
+				extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
+
 			case 'EXT_texture_filter_anisotropic':
 				extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
 				break;

+ 116 - 111
build/three.min.js

@@ -5,7 +5,7 @@ THREE.CullFaceNone=0;THREE.CullFaceBack=1;THREE.CullFaceFront=2;THREE.CullFaceFr
 THREE.CustomBlending=5;THREE.AddEquation=100;THREE.SubtractEquation=101;THREE.ReverseSubtractEquation=102;THREE.MinEquation=103;THREE.MaxEquation=104;THREE.ZeroFactor=200;THREE.OneFactor=201;THREE.SrcColorFactor=202;THREE.OneMinusSrcColorFactor=203;THREE.SrcAlphaFactor=204;THREE.OneMinusSrcAlphaFactor=205;THREE.DstAlphaFactor=206;THREE.OneMinusDstAlphaFactor=207;THREE.DstColorFactor=208;THREE.OneMinusDstColorFactor=209;THREE.SrcAlphaSaturateFactor=210;THREE.NeverDepth=0;THREE.AlwaysDepth=1;
 THREE.LessDepth=2;THREE.LessEqualDepth=3;THREE.EqualDepth=4;THREE.GreaterEqualDepth=5;THREE.GreaterDepth=6;THREE.NotEqualDepth=7;THREE.MultiplyOperation=0;THREE.MixOperation=1;THREE.AddOperation=2;THREE.NoToneMapping=0;THREE.LinearToneMapping=1;THREE.ReinhardToneMapping=2;THREE.Uncharted2ToneMapping=3;THREE.CineonToneMapping=4;THREE.UVMapping=300;THREE.CubeReflectionMapping=301;THREE.CubeRefractionMapping=302;THREE.EquirectangularReflectionMapping=303;THREE.EquirectangularRefractionMapping=304;
 THREE.SphericalReflectionMapping=305;THREE.CubeUVReflectionMapping=306;THREE.CubeUVRefractionMapping=307;THREE.RepeatWrapping=1E3;THREE.ClampToEdgeWrapping=1001;THREE.MirroredRepeatWrapping=1002;THREE.NearestFilter=1003;THREE.NearestMipMapNearestFilter=1004;THREE.NearestMipMapLinearFilter=1005;THREE.LinearFilter=1006;THREE.LinearMipMapNearestFilter=1007;THREE.LinearMipMapLinearFilter=1008;THREE.UnsignedByteType=1009;THREE.ByteType=1010;THREE.ShortType=1011;THREE.UnsignedShortType=1012;
-THREE.IntType=1013;THREE.UnsignedIntType=1014;THREE.FloatType=1015;THREE.HalfFloatType=1025;THREE.UnsignedShort4444Type=1016;THREE.UnsignedShort5551Type=1017;THREE.UnsignedShort565Type=1018;THREE.AlphaFormat=1019;THREE.RGBFormat=1020;THREE.RGBAFormat=1021;THREE.LuminanceFormat=1022;THREE.LuminanceAlphaFormat=1023;THREE.RGBEFormat=THREE.RGBAFormat;THREE.RGB_S3TC_DXT1_Format=2001;THREE.RGBA_S3TC_DXT1_Format=2002;THREE.RGBA_S3TC_DXT3_Format=2003;THREE.RGBA_S3TC_DXT5_Format=2004;
+THREE.IntType=1013;THREE.UnsignedIntType=1014;THREE.FloatType=1015;THREE.HalfFloatType=1025;THREE.UnsignedShort4444Type=1016;THREE.UnsignedShort5551Type=1017;THREE.UnsignedShort565Type=1018;THREE.AlphaFormat=1019;THREE.RGBFormat=1020;THREE.RGBAFormat=1021;THREE.LuminanceFormat=1022;THREE.LuminanceAlphaFormat=1023;THREE.RGBEFormat=THREE.RGBAFormat;THREE.DepthFormat=1026;THREE.RGB_S3TC_DXT1_Format=2001;THREE.RGBA_S3TC_DXT1_Format=2002;THREE.RGBA_S3TC_DXT3_Format=2003;THREE.RGBA_S3TC_DXT5_Format=2004;
 THREE.RGB_PVRTC_4BPPV1_Format=2100;THREE.RGB_PVRTC_2BPPV1_Format=2101;THREE.RGBA_PVRTC_4BPPV1_Format=2102;THREE.RGBA_PVRTC_2BPPV1_Format=2103;THREE.RGB_ETC1_Format=2151;THREE.LoopOnce=2200;THREE.LoopRepeat=2201;THREE.LoopPingPong=2202;THREE.InterpolateDiscrete=2300;THREE.InterpolateLinear=2301;THREE.InterpolateSmooth=2302;THREE.ZeroCurvatureEnding=2400;THREE.ZeroSlopeEnding=2401;THREE.WrapAroundEnding=2402;THREE.TrianglesDrawMode=0;THREE.TriangleStripDrawMode=1;THREE.TriangleFanDrawMode=2;
 THREE.LinearEncoding=3E3;THREE.sRGBEncoding=3001;THREE.GammaEncoding=3007;THREE.RGBEEncoding=3002;THREE.LogLuvEncoding=3003;THREE.RGBM7Encoding=3004;THREE.RGBM16Encoding=3005;THREE.RGBDEncoding=3006;THREE.AutoDepthFormat=3100;THREE.LinearClipZDepthFormat=3101;THREE.InvClipZDepthFormat=3102;THREE.LinearDepthPacking=3200;THREE.RGBADepthPacking=3201;THREE.Color=function(a){return 3===arguments.length?this.fromArray(arguments):this.set(a)};
 THREE.Color.prototype={constructor:THREE.Color,r:1,g:1,b:1,set:function(a){a instanceof THREE.Color?this.copy(a):"number"===typeof a?this.setHex(a):"string"===typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(){function a(a,c,d){0>d&&(d+=1);1<d&&(d-=1);return d<1/6?a+6*(c-a)*
@@ -107,7 +107,7 @@ b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.
 d,l=c*g,n=c*d,b[0]=g*h,b[4]=n-a*e,b[8]=l*e+k,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=k*e+l,b[10]=a-n*e):"XZY"===a.order&&(a=f*g,k=f*d,l=c*g,n=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+n,b[5]=f*h,b[9]=k*e-l,b[2]=l*e-k,b[6]=c*h,b[10]=n*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){var b=this.elements,c=a.x,d=a.y,e=a.z,f=a.w,g=c+c,h=d+d,k=e+e;a=c*g;var l=c*h,c=c*k,n=d*h,d=d*k,e=e*k,g=f*g,h=f*h,f=f*k;b[0]=1-(n+e);b[4]=l-f;b[8]=c+h;b[1]=l+
 f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+n);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},lookAt:function(){var a,b,c;return function(d,e,f){void 0===a&&(a=new THREE.Vector3);void 0===b&&(b=new THREE.Vector3);void 0===c&&(c=new THREE.Vector3);var g=this.elements;c.subVectors(d,e).normalize();0===c.lengthSq()&&(c.z=1);a.crossVectors(f,c).normalize();0===a.lengthSq()&&(c.x+=1E-4,a.crossVectors(f,c).normalize());b.crossVectors(c,a);g[0]=a.x;g[4]=b.x;g[8]=c.x;g[1]=a.y;
 g[5]=b.y;g[9]=c.y;g[2]=a.z;g[6]=b.z;g[10]=c.z;return this}}(),multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],k=c[12],l=c[1],n=c[5],p=c[9],m=c[13],q=c[2],u=c[6],v=c[10],t=c[14],
-s=c[3],w=c[7],D=c[11],c=c[15],x=d[0],C=d[4],y=d[8],z=d[12],A=d[1],E=d[5],F=d[9],B=d[13],M=d[2],J=d[6],O=d[10],K=d[14],I=d[3],H=d[7],P=d[11],d=d[15];e[0]=f*x+g*A+h*M+k*I;e[4]=f*C+g*E+h*J+k*H;e[8]=f*y+g*F+h*O+k*P;e[12]=f*z+g*B+h*K+k*d;e[1]=l*x+n*A+p*M+m*I;e[5]=l*C+n*E+p*J+m*H;e[9]=l*y+n*F+p*O+m*P;e[13]=l*z+n*B+p*K+m*d;e[2]=q*x+u*A+v*M+t*I;e[6]=q*C+u*E+v*J+t*H;e[10]=q*y+u*F+v*O+t*P;e[14]=q*z+u*B+v*K+t*d;e[3]=s*x+w*A+D*M+c*I;e[7]=s*C+w*E+D*J+c*H;e[11]=s*y+w*F+D*O+c*P;e[15]=s*z+w*B+D*K+c*d;return this},
+s=c[3],w=c[7],D=c[11],c=c[15],x=d[0],C=d[4],y=d[8],z=d[12],A=d[1],E=d[5],F=d[9],B=d[13],M=d[2],J=d[6],O=d[10],L=d[14],I=d[3],H=d[7],P=d[11],d=d[15];e[0]=f*x+g*A+h*M+k*I;e[4]=f*C+g*E+h*J+k*H;e[8]=f*y+g*F+h*O+k*P;e[12]=f*z+g*B+h*L+k*d;e[1]=l*x+n*A+p*M+m*I;e[5]=l*C+n*E+p*J+m*H;e[9]=l*y+n*F+p*O+m*P;e[13]=l*z+n*B+p*L+m*d;e[2]=q*x+u*A+v*M+t*I;e[6]=q*C+u*E+v*J+t*H;e[10]=q*y+u*F+v*O+t*P;e[14]=q*z+u*B+v*L+t*d;e[3]=s*x+w*A+D*M+c*I;e[7]=s*C+w*E+D*J+c*H;e[11]=s*y+w*F+D*O+c*P;e[15]=s*z+w*B+D*L+c*d;return this},
 multiplyToArray:function(a,b,c){var d=this.elements;this.multiplyMatrices(a,b);c[0]=d[0];c[1]=d[1];c[2]=d[2];c[3]=d[3];c[4]=d[4];c[5]=d[5];c[6]=d[6];c[7]=d[7];c[8]=d[8];c[9]=d[9];c[10]=d[10];c[11]=d[11];c[12]=d[12];c[13]=d[13];c[14]=d[14];c[15]=d[15];return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},applyToVector3Array:function(){var a;return function(b,
 c,d){void 0===a&&(a=new THREE.Vector3);void 0===c&&(c=0);void 0===d&&(d=b.length);for(var e=0;e<d;e+=3,c+=3)a.fromArray(b,c),a.applyMatrix4(this),a.toArray(b,c);return b}}(),applyToBuffer:function(){var a;return function(b,c,d){void 0===a&&(a=new THREE.Vector3);void 0===c&&(c=0);void 0===d&&(d=b.length/b.itemSize);for(var e=0;e<d;e++,c++)a.x=b.getX(c),a.y=b.getY(c),a.z=b.getZ(c),a.applyMatrix4(this),b.setXYZ(a.x,a.y,a.z);return b}}(),determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],
 e=a[12],f=a[1],g=a[5],h=a[9],k=a[13],l=a[2],n=a[6],p=a[10],m=a[14];return a[3]*(+e*h*n-d*k*n-e*g*p+c*k*p+d*g*m-c*h*m)+a[7]*(+b*h*m-b*k*p+e*f*p-d*f*m+d*k*l-e*h*l)+a[11]*(+b*k*n-b*g*m-e*f*n+c*f*m+e*g*l-c*k*l)+a[15]*(-d*g*l-b*h*n+b*g*p+d*f*n-c*f*p+c*h*l)},transpose:function(){var a=this.elements,b;b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},flattenToArrayOffset:function(a,b){var c=
@@ -483,7 +483,8 @@ THREE.Texture.prototype={constructor:THREE.Texture,set needsUpdate(a){!0===a&&th
 a.premultiplyAlpha;this.flipY=a.flipY;this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){if(void 0!==a.textures[this.uuid])return a.textures[this.uuid];var b={metadata:{version:4.4,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],wrap:[this.wrapS,this.wrapT],minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy};
 if(void 0!==this.image){var c=this.image;void 0===c.uuid&&(c.uuid=THREE.Math.generateUUID());if(void 0===a.images[c.uuid]){var d=a.images,e=c.uuid,f=c.uuid,g;void 0!==c.toDataURL?g=c:(g=document.createElement("canvas"),g.width=c.width,g.height=c.height,g.getContext("2d").drawImage(c,0,0,c.width,c.height));g=2048<g.width||2048<g.height?g.toDataURL("image/jpeg",.6):g.toDataURL("image/png");d[e]={uuid:f,url:g}}b.image=c.uuid}return a.textures[this.uuid]=b},dispose:function(){this.dispatchEvent({type:"dispose"})},
 transformUv:function(a){if(this.mapping===THREE.UVMapping){a.multiply(this.repeat);a.add(this.offset);if(0>a.x||1<a.x)switch(this.wrapS){case THREE.RepeatWrapping:a.x-=Math.floor(a.x);break;case THREE.ClampToEdgeWrapping:a.x=0>a.x?0:1;break;case THREE.MirroredRepeatWrapping:1===Math.abs(Math.floor(a.x)%2)?a.x=Math.ceil(a.x)-a.x:a.x-=Math.floor(a.x)}if(0>a.y||1<a.y)switch(this.wrapT){case THREE.RepeatWrapping:a.y-=Math.floor(a.y);break;case THREE.ClampToEdgeWrapping:a.y=0>a.y?0:1;break;case THREE.MirroredRepeatWrapping:1===
-Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;
+Math.abs(Math.floor(a.y)%2)?a.y=Math.ceil(a.y)-a.y:a.y-=Math.floor(a.y)}this.flipY&&(a.y=1-a.y)}}};THREE.EventDispatcher.prototype.apply(THREE.Texture.prototype);THREE.TextureIdCount=0;THREE.DepthTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,null,d,e,f,g,h,THREE.DepthFormat,c,k);this.image={width:a,height:b};this.type=void 0!==c?c:THREE.UnsignedShortType;this.magFilter=void 0!==g?g:THREE.NearestFilter;this.minFilter=void 0!==h?h:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};
+THREE.DepthTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DepthTexture.prototype.constructor=THREE.DepthTexture;THREE.CanvasTexture=function(a,b,c,d,e,f,g,h,k){THREE.Texture.call(this,a,b,c,d,e,f,g,h,k);this.needsUpdate=!0};THREE.CanvasTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CanvasTexture.prototype.constructor=THREE.CanvasTexture;
 THREE.CubeTexture=function(a,b,c,d,e,f,g,h,k,l){a=void 0!==a?a:[];b=void 0!==b?b:THREE.CubeReflectionMapping;THREE.Texture.call(this,a,b,c,d,e,f,g,h,k,l);this.flipY=!1};THREE.CubeTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CubeTexture.prototype.constructor=THREE.CubeTexture;Object.defineProperty(THREE.CubeTexture.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});
 THREE.CompressedTexture=function(a,b,c,d,e,f,g,h,k,l,n,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,n,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1};THREE.CompressedTexture.prototype=Object.create(THREE.Texture.prototype);THREE.CompressedTexture.prototype.constructor=THREE.CompressedTexture;
 THREE.DataTexture=function(a,b,c,d,e,f,g,h,k,l,n,p){THREE.Texture.call(this,null,f,g,h,k,l,d,e,n,p);this.image={data:a,width:b,height:c};this.magFilter=void 0!==k?k:THREE.NearestFilter;this.minFilter=void 0!==l?l:THREE.NearestFilter;this.generateMipmaps=this.flipY=!1};THREE.DataTexture.prototype=Object.create(THREE.Texture.prototype);THREE.DataTexture.prototype.constructor=THREE.DataTexture;
@@ -503,9 +504,9 @@ THREE.Mesh.prototype.getMorphTargetIndexByName=function(a){if(void 0!==this.morp
 THREE.Mesh.prototype.raycast=function(){function a(a,b,c,d,e,f,g){THREE.Triangle.barycoordFromPoint(a,b,c,d,v);e.multiplyScalar(v.x);f.multiplyScalar(v.y);g.multiplyScalar(v.z);e.add(f).add(g);return e.clone()}function b(a,b,c,d,e,f,g){var h=a.material;if(null===(h.side===THREE.BackSide?c.intersectTriangle(f,e,d,!0,g):c.intersectTriangle(d,e,f,h.side!==THREE.DoubleSide,g)))return null;s.copy(g);s.applyMatrix4(a.matrixWorld);c=b.ray.origin.distanceTo(s);return c<b.near||c>b.far?null:{distance:c,point:s.clone(),
 object:a}}function c(c,d,e,f,l,n,p,s){g.fromArray(f,3*n);h.fromArray(f,3*p);k.fromArray(f,3*s);if(c=b(c,d,e,g,h,k,t))l&&(m.fromArray(l,2*n),q.fromArray(l,2*p),u.fromArray(l,2*s),c.uv=a(t,g,h,k,m,q,u)),c.face=new THREE.Face3(n,p,s,THREE.Triangle.normal(g,h,k)),c.faceIndex=n;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,k=new THREE.Vector3,l=new THREE.Vector3,n=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector2,q=new THREE.Vector2,
 u=new THREE.Vector2,v=new THREE.Vector3,t=new THREE.Vector3,s=new THREE.Vector3;return function(s,v){var x=this.geometry,C=this.material,y=this.matrixWorld;if(void 0!==C&&(null===x.boundingSphere&&x.computeBoundingSphere(),f.copy(x.boundingSphere),f.applyMatrix4(y),!1!==s.ray.intersectsSphere(f)&&(d.getInverse(y),e.copy(s.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox)))){var z,A;if(x instanceof THREE.BufferGeometry){var E,F,C=x.index,y=x.attributes,x=y.position.array;
-void 0!==y.uv&&(z=y.uv.array);if(null!==C)for(var y=C.array,B=0,M=y.length;B<M;B+=3){if(C=y[B],E=y[B+1],F=y[B+2],A=c(this,s,e,x,z,C,E,F))A.faceIndex=Math.floor(B/3),v.push(A)}else for(B=0,M=x.length;B<M;B+=9)if(C=B/3,E=C+1,F=C+2,A=c(this,s,e,x,z,C,E,F))A.index=C,v.push(A)}else if(x instanceof THREE.Geometry){var J,O,y=C instanceof THREE.MultiMaterial,B=!0===y?C.materials:null,M=x.vertices;E=x.faces;F=x.faceVertexUvs[0];0<F.length&&(z=F);for(var K=0,I=E.length;K<I;K++){var H=E[K];A=!0===y?B[H.materialIndex]:
-C;if(void 0!==A){F=M[H.a];J=M[H.b];O=M[H.c];if(!0===A.morphTargets){A=x.morphTargets;var P=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);k.set(0,0,0);for(var R=0,Q=A.length;R<Q;R++){var N=P[R];if(0!==N){var G=A[R].vertices;g.addScaledVector(l.subVectors(G[H.a],F),N);h.addScaledVector(n.subVectors(G[H.b],J),N);k.addScaledVector(p.subVectors(G[H.c],O),N)}}g.add(F);h.add(J);k.add(O);F=g;J=h;O=k}if(A=b(this,s,e,F,J,O,t))z&&(P=z[K],m.copy(P[0]),q.copy(P[1]),u.copy(P[2]),A.uv=a(t,F,J,O,m,q,u)),A.face=
-H,A.faceIndex=K,v.push(A)}}}}}}();THREE.Mesh.prototype.clone=function(){return(new this.constructor(this.geometry,this.material)).copy(this)};THREE.Bone=function(a){THREE.Object3D.call(this);this.type="Bone";this.skin=a};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype);THREE.Bone.prototype.constructor=THREE.Bone;THREE.Bone.prototype.copy=function(a){THREE.Object3D.prototype.copy.call(this,a);this.skin=a.skin;return this};
+void 0!==y.uv&&(z=y.uv.array);if(null!==C)for(var y=C.array,B=0,M=y.length;B<M;B+=3){if(C=y[B],E=y[B+1],F=y[B+2],A=c(this,s,e,x,z,C,E,F))A.faceIndex=Math.floor(B/3),v.push(A)}else for(B=0,M=x.length;B<M;B+=9)if(C=B/3,E=C+1,F=C+2,A=c(this,s,e,x,z,C,E,F))A.index=C,v.push(A)}else if(x instanceof THREE.Geometry){var J,O,y=C instanceof THREE.MultiMaterial,B=!0===y?C.materials:null,M=x.vertices;E=x.faces;F=x.faceVertexUvs[0];0<F.length&&(z=F);for(var L=0,I=E.length;L<I;L++){var H=E[L];A=!0===y?B[H.materialIndex]:
+C;if(void 0!==A){F=M[H.a];J=M[H.b];O=M[H.c];if(!0===A.morphTargets){A=x.morphTargets;var P=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);k.set(0,0,0);for(var R=0,Q=A.length;R<Q;R++){var N=P[R];if(0!==N){var G=A[R].vertices;g.addScaledVector(l.subVectors(G[H.a],F),N);h.addScaledVector(n.subVectors(G[H.b],J),N);k.addScaledVector(p.subVectors(G[H.c],O),N)}}g.add(F);h.add(J);k.add(O);F=g;J=h;O=k}if(A=b(this,s,e,F,J,O,t))z&&(P=z[L],m.copy(P[0]),q.copy(P[1]),u.copy(P[2]),A.uv=a(t,F,J,O,m,q,u)),A.face=
+H,A.faceIndex=L,v.push(A)}}}}}}();THREE.Mesh.prototype.clone=function(){return(new this.constructor(this.geometry,this.material)).copy(this)};THREE.Bone=function(a){THREE.Object3D.call(this);this.type="Bone";this.skin=a};THREE.Bone.prototype=Object.create(THREE.Object3D.prototype);THREE.Bone.prototype.constructor=THREE.Bone;THREE.Bone.prototype.copy=function(a){THREE.Object3D.prototype.copy.call(this,a);this.skin=a.skin;return this};
 THREE.Skeleton=function(a,b,c){this.useVertexTexture=void 0!==c?c:!0;this.identityMatrix=new THREE.Matrix4;a=a||[];this.bones=a.slice(0);this.useVertexTexture?(a=Math.sqrt(4*this.bones.length),a=THREE.Math.nextPowerOfTwo(Math.ceil(a)),this.boneTextureHeight=this.boneTextureWidth=a=Math.max(a,4),this.boneMatrices=new Float32Array(this.boneTextureWidth*this.boneTextureHeight*4),this.boneTexture=new THREE.DataTexture(this.boneMatrices,this.boneTextureWidth,this.boneTextureHeight,THREE.RGBAFormat,THREE.FloatType)):
 this.boneMatrices=new Float32Array(16*this.bones.length);if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton bonInverses is the wrong length."),this.boneInverses=[],b=0,a=this.bones.length;b<a;b++)this.boneInverses.push(new THREE.Matrix4)};
 THREE.Skeleton.prototype.calculateInverses=function(){this.boneInverses=[];for(var a=0,b=this.bones.length;a<b;a++){var c=new THREE.Matrix4;this.bones[a]&&c.getInverse(this.bones[a].matrixWorld);this.boneInverses.push(c)}};
@@ -601,98 +602,102 @@ envMapIntensity:{type:"1f",value:1}}]),vertexShader:THREE.ShaderChunk.meshstanda
 value:new THREE.Color(0)},roughness:{type:"1f",value:.5},metalness:{type:"1f",value:0},envMapIntensity:{type:"1f",value:1}}]),vertexShader:THREE.ShaderChunk.meshphysical_vert,fragmentShader:THREE.ShaderChunk.meshphysical_frag},points:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.points,THREE.UniformsLib.fog]),vertexShader:THREE.ShaderChunk.points_vert,fragmentShader:THREE.ShaderChunk.points_frag},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"1f",
 value:1},dashSize:{type:"1f",value:1},totalSize:{type:"1f",value:2}}]),vertexShader:THREE.ShaderChunk.linedashed_vert,fragmentShader:THREE.ShaderChunk.linedashed_frag},depth:{uniforms:{mNear:{type:"1f",value:1},mFar:{type:"1f",value:2E3},opacity:{type:"1f",value:1}},vertexShader:THREE.ShaderChunk.depth_vert,fragmentShader:THREE.ShaderChunk.depth_frag},normal:{uniforms:{opacity:{type:"1f",value:1}},vertexShader:THREE.ShaderChunk.normal_vert,fragmentShader:THREE.ShaderChunk.normal_frag},cube:{uniforms:{tCube:{type:"t",
 value:null},tFlip:{type:"1f",value:-1}},vertexShader:THREE.ShaderChunk.cube_vert,fragmentShader:THREE.ShaderChunk.cube_frag},equirect:{uniforms:{tEquirect:{type:"t",value:null},tFlip:{type:"1f",value:-1}},vertexShader:THREE.ShaderChunk.equirect_vert,fragmentShader:THREE.ShaderChunk.equirect_frag},distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3}},vertexShader:THREE.ShaderChunk.distanceRGBA_vert,fragmentShader:THREE.ShaderChunk.distanceRGBA_frag}};
-THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===Z&&(a*=d,b*=d,c*=d);L.clearColor(a,b,c,d)}function c(){L.init();L.scissor(va.copy(Ga).multiplyScalar(aa));L.viewport(na.copy(oa).multiplyScalar(aa));b(ba.r,ba.g,ba.b,ka)}function d(){ga=Ha=null;pa="";qa=-1;L.reset()}function e(a){a.preventDefault();d();c();U.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=U.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===
-b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}U.delete(a)}la.textures--}function g(a){a=a.target;a.removeEventListener("dispose",g);var b=U.get(a),c=U.get(a.texture);if(a&&void 0!==c.__webglTexture){r.deleteTexture(c.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglDepthbuffer);U.delete(a.texture);
-U.delete(a)}la.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);U.delete(a)}function k(a){var b=U.get(a).program;a.program=void 0;void 0!==b&&ra.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?
-a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=ha,f=++ma):(d=X,f=++ia);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=Y.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:Y.z,group:e},d.push(f))}function q(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();var c=Oa.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);if(!La.intersectsSphere(c))return!1;if(0===ca)return!0;a=W.clippingPlanes;
-var b=c.center,c=-c.radius,d=0;do if(a[d].distanceToPoint(b)<c)return!1;while(++d!==ca);return!0}function u(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)$.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==q(a)||Ia.push(a);else if(a instanceof THREE.LensFlare)Ja.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===W.sortObjects&&(Y.setFromMatrixPosition(a.matrixWorld),Y.applyProjection(wa)),m(a,null,a.material,Y.z,null);else if(a instanceof
-THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===q(a)){var c=a.material;if(!0===c.visible){!0===W.sortObjects&&(Y.setFromMatrixPosition(a.matrixWorld),Y.applyProjection(wa));var d=sa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c<g;c++){var h=e[c],k=f[h.materialIndex];!0===k.visible&&m(a,d,k,Y.z,h)}else m(a,d,c,Y.z,null)}}d=a.children;c=0;for(g=d.length;c<
-g;c++)u(d[c],b)}}function v(a,b,c,d){for(var e=0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,l=void 0===d?g.material:d,g=g.group;h.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,h.matrixWorld);h.normalMatrix.getNormalMatrix(h.modelViewMatrix);if(h instanceof THREE.ImmediateRenderObject){t(l);var m=s(b,c,l,h);pa="";h.render(function(a){W.renderBufferImmediate(a,m,l)})}else W.renderBufferDirect(b,c,k,l,h,g)}}function t(a){a.side!==THREE.DoubleSide?L.enable(r.CULL_FACE):L.disable(r.CULL_FACE);
-L.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?L.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha):L.setBlending(THREE.NoBlending);L.setDepthFunc(a.depthFunc);L.setDepthTest(a.depthTest);L.setDepthWrite(a.depthWrite);L.setColorWrite(a.colorWrite);L.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function s(a,b,c,d){xa=0;var e=U.get(c);if(ya){if(za||a!==ga){var f=c.clippingPlanes,
-g=a===ga&&c.id===qa;if(!za||null===f||0===f.length||ta&&!c.clipShadows)ta?y(null):z();else{var l=ta?0:ua,m=4*l,n=e.clippingState||null;fa.value=n;n=y(f,a,m,g);for(f=0;f!==m;++f)n[f]=Aa[f];e.clippingState=n;ca+=l}}void 0!==e.numClippingPlanes&&e.numClippingPlanes!==ca&&(c.needsUpdate=!0)}void 0===e.program&&(c.needsUpdate=!0);void 0!==e.lightsHash&&e.lightsHash!==S.hash&&(c.needsUpdate=!0);if(c.needsUpdate){a:{l=U.get(c);m=ra.getParameters(c,S,b,ca,d);n=ra.getProgramCode(c,m);f=l.program;g=!0;if(void 0===
-f)c.addEventListener("dispose",h);else if(f.code!==n)k(c);else if(void 0!==m.shaderID)break a;else g=!1;g&&(m.shaderID?(f=THREE.ShaderLib[m.shaderID],l.__webglShader={name:c.type,uniforms:THREE.UniformsUtils.clone(f.uniforms),vertexShader:f.vertexShader,fragmentShader:f.fragmentShader}):l.__webglShader={name:c.type,uniforms:c.uniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader},c.__webglShader=l.__webglShader,f=ra.acquireProgram(c,m,n),l.program=f,c.program=f);m=f.getAttributes();
-if(c.morphTargets)for(n=c.numSupportedMorphTargets=0;n<W.maxMorphTargets;n++)0<=m["morphTarget"+n]&&c.numSupportedMorphTargets++;if(c.morphNormals)for(n=c.numSupportedMorphNormals=0;n<W.maxMorphNormals;n++)0<=m["morphNormal"+n]&&c.numSupportedMorphNormals++;m=l.__webglShader.uniforms;(c instanceof THREE.ShaderMaterial||c instanceof THREE.RawShaderMaterial)&&!0!==c.clipping||(l.numClippingPlanes=ca,m.clippingPlanes=fa);n=l.program.getUniforms();l.uniformsList=[];for(var p in m)(f=n[p])&&l.uniformsList.push([l.__webglShader.uniforms[p],
-f]);if(c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshStandardMaterial||c.lights)l.lightsHash=S.hash,m.ambientLightColor.value=S.ambient,m.directionalLights.value=S.directional,m.spotLights.value=S.spot,m.pointLights.value=S.point,m.hemisphereLights.value=S.hemi,m.directionalShadowMap.value=S.directionalShadowMap,m.directionalShadowMatrix.value=S.directionalShadowMatrix,m.spotShadowMap.value=S.spotShadowMap,m.spotShadowMatrix.value=S.spotShadowMatrix,
-m.pointShadowMap.value=S.pointShadowMap,m.pointShadowMatrix.value=S.pointShadowMatrix;l.hasDynamicUniforms=!1;p=0;for(m=l.uniformsList.length;p<m;p++)if(!0===l.uniformsList[p][0].dynamic){l.hasDynamicUniforms=!0;break}}c.needsUpdate=!1}f=n=g=!1;p=e.program;l=p.getUniforms();m=e.__webglShader.uniforms;p.id!==Ha&&(r.useProgram(p.program),Ha=p.id,f=n=g=!0);c.id!==qa&&(qa=c.id,n=!0);if(g||a!==ga)r.uniformMatrix4fv(l.projectionMatrix,!1,a.projectionMatrix.elements),da.logarithmicDepthBuffer&&r.uniform1f(l.logDepthBufFC,
-2/(Math.log(a.far+1)/Math.LN2)),a!==ga&&(ga=a,f=n=!0),(c instanceof THREE.ShaderMaterial||c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshStandardMaterial||c.envMap)&&void 0!==l.cameraPosition&&(Y.setFromMatrixPosition(a.matrixWorld),r.uniform3f(l.cameraPosition,Y.x,Y.y,Y.z)),(c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshBasicMaterial||c instanceof THREE.MeshStandardMaterial||c instanceof THREE.ShaderMaterial||c.skinning)&&void 0!==
-l.viewMatrix&&r.uniformMatrix4fv(l.viewMatrix,!1,a.matrixWorldInverse.elements),void 0!==l.toneMappingExposure&&r.uniform1f(l.toneMappingExposure,W.toneMappingExposure),void 0!==l.toneMappingWhitePoint&&r.uniform1f(l.toneMappingWhitePoint,W.toneMappingWhitePoint);c.skinning&&(d.bindMatrix&&void 0!==l.bindMatrix&&r.uniformMatrix4fv(l.bindMatrix,!1,d.bindMatrix.elements),d.bindMatrixInverse&&void 0!==l.bindMatrixInverse&&r.uniformMatrix4fv(l.bindMatrixInverse,!1,d.bindMatrixInverse.elements),da.floatVertexTextures&&
-d.skeleton&&d.skeleton.useVertexTexture?(void 0!==l.boneTexture&&(g=D(),r.uniform1i(l.boneTexture,g),W.setTexture(d.skeleton.boneTexture,g)),void 0!==l.boneTextureWidth&&r.uniform1i(l.boneTextureWidth,d.skeleton.boneTextureWidth),void 0!==l.boneTextureHeight&&r.uniform1i(l.boneTextureHeight,d.skeleton.boneTextureHeight)):d.skeleton&&d.skeleton.boneMatrices&&void 0!==l.boneGlobalMatrices&&r.uniformMatrix4fv(l.boneGlobalMatrices,!1,d.skeleton.boneMatrices));if(n){if(c instanceof THREE.MeshPhongMaterial||
-c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshStandardMaterial||c.lights)n=f,m.ambientLightColor.needsUpdate=n,m.directionalLights.needsUpdate=n,m.pointLights.needsUpdate=n,m.spotLights.needsUpdate=n,m.hemisphereLights.needsUpdate=n;b&&c.fog&&(m.fogColor.value=b.color,b instanceof THREE.Fog?(m.fogNear.value=b.near,m.fogFar.value=b.far):b instanceof THREE.FogExp2&&(m.fogDensity.value=b.density));if(c instanceof THREE.MeshBasicMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof
-THREE.MeshPhongMaterial||c instanceof THREE.MeshStandardMaterial){m.opacity.value=c.opacity;m.diffuse.value=c.color;c.emissive&&m.emissive.value.copy(c.emissive).multiplyScalar(c.emissiveIntensity);m.map.value=c.map;m.specularMap.value=c.specularMap;m.alphaMap.value=c.alphaMap;c.aoMap&&(m.aoMap.value=c.aoMap,m.aoMapIntensity.value=c.aoMapIntensity);var q;c.map?q=c.map:c.specularMap?q=c.specularMap:c.displacementMap?q=c.displacementMap:c.normalMap?q=c.normalMap:c.bumpMap?q=c.bumpMap:c.roughnessMap?
-q=c.roughnessMap:c.metalnessMap?q=c.metalnessMap:c.alphaMap?q=c.alphaMap:c.emissiveMap&&(q=c.emissiveMap);void 0!==q&&(q instanceof THREE.WebGLRenderTarget&&(q=q.texture),b=q.offset,q=q.repeat,m.offsetRepeat.value.set(b.x,b.y,q.x,q.y));m.envMap.value=c.envMap;m.flipEnvMap.value=c.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;m.reflectivity.value=c.reflectivity;m.refractionRatio.value=c.refractionRatio}c instanceof THREE.LineBasicMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity):c instanceof
-THREE.LineDashedMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.dashSize.value=c.dashSize,m.totalSize.value=c.dashSize+c.gapSize,m.scale.value=c.scale):c instanceof THREE.PointsMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.size.value=c.size*aa,m.scale.value=.5*H.clientHeight,m.map.value=c.map,null!==c.map&&(q=c.map.offset,c=c.map.repeat,m.offsetRepeat.value.set(q.x,q.y,c.x,c.y))):c instanceof THREE.MeshLambertMaterial?(c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=
-c.lightMapIntensity),c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap)):c instanceof THREE.MeshPhongMaterial?(m.specular.value=c.specular,m.shininess.value=Math.max(c.shininess,1E-4),c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=c.lightMapIntensity),c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap),c.bumpMap&&(m.bumpMap.value=c.bumpMap,m.bumpScale.value=c.bumpScale),c.normalMap&&(m.normalMap.value=c.normalMap,m.normalScale.value.copy(c.normalScale)),c.displacementMap&&(m.displacementMap.value=
-c.displacementMap,m.displacementScale.value=c.displacementScale,m.displacementBias.value=c.displacementBias)):c instanceof THREE.MeshPhysicalMaterial?w(m,c):c instanceof THREE.MeshStandardMaterial?w(m,c):c instanceof THREE.MeshDepthMaterial?(m.mNear.value=a.near,m.mFar.value=a.far,m.opacity.value=c.opacity):c instanceof THREE.MeshNormalMaterial&&(m.opacity.value=c.opacity);C(e.uniformsList)}r.uniformMatrix4fv(l.modelViewMatrix,!1,d.modelViewMatrix.elements);l.normalMatrix&&r.uniformMatrix3fv(l.normalMatrix,
-!1,d.normalMatrix.elements);void 0!==l.modelMatrix&&r.uniformMatrix4fv(l.modelMatrix,!1,d.matrixWorld.elements);if(!0===e.hasDynamicUniforms){e=e.uniformsList;c=[];q=0;for(b=e.length;q<b;q++)l=e[q][0],m=l.onUpdateCallback,void 0!==m&&(m.bind(l)(d,a),c.push(e[q]));C(c)}return p}function w(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=b.metalnessMap);b.lightMap&&(a.lightMap.value=b.lightMap,
-a.lightMapIntensity.value=b.lightMapIntensity);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);b.envMap&&(a.envMapIntensity.value=b.envMapIntensity)}function D(){var a=xa;a>=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+
-a+" texture units while this GPU supports only "+da.maxTextures);xa+=1;return a}function x(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===
-b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("iv1"===b)r.uniform1iv(c,d);else if("iv"===b)r.uniform3iv(c,d);else if("fv1"===b)r.uniform1fv(c,d);else if("fv"===b)r.uniform3fv(c,d);else if("v2"===b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,
-d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var f in a){e=a[f];var g=c[f],h=d[f];x(e,e.type,g,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;b<k;b++)for(f in a)e=a[f],g=c[b][f],h=d[b][f],x(e,e.type,g,h)}else if("v2v"===b){void 0===a._array&&(a._array=new Float32Array(2*d.length));e=b=0;for(f=d.length;b<f;b++,e+=2)a._array[e+0]=d[b].x,a._array[e+1]=d[b].y;r.uniform2fv(c,a._array)}else if("v3v"===b){void 0===a._array&&(a._array=new Float32Array(3*
-d.length));e=b=0;for(f=d.length;b<f;b++,e+=3)a._array[e+0]=d[b].x,a._array[e+1]=d[b].y,a._array[e+2]=d[b].z;r.uniform3fv(c,a._array)}else if("v4v"===b){void 0===a._array&&(a._array=new Float32Array(4*d.length));e=b=0;for(f=d.length;b<f;b++,e+=4)a._array[e+0]=d[b].x,a._array[e+1]=d[b].y,a._array[e+2]=d[b].z,a._array[e+3]=d[b].w;r.uniform4fv(c,a._array)}else if("m2"===b)r.uniformMatrix2fv(c,!1,d.elements);else if("m3"===b)r.uniformMatrix3fv(c,!1,d.elements);else if("m3v"===b){void 0===a._array&&(a._array=
-new Float32Array(9*d.length));b=0;for(f=d.length;b<f;b++)d[b].flattenToArrayOffset(a._array,9*b);r.uniformMatrix3fv(c,!1,a._array)}else if("m4"===b)r.uniformMatrix4fv(c,!1,d.elements);else if("m4v"===b){void 0===a._array&&(a._array=new Float32Array(16*d.length));b=0;for(f=d.length;b<f;b++)d[b].flattenToArrayOffset(a._array,16*b);r.uniformMatrix4fv(c,!1,a._array)}else if("t"===b)e=D(),r.uniform1i(c,e),d&&(d instanceof THREE.CubeTexture||Array.isArray(d.image)&&6===d.image.length?B(d,e):d instanceof
-THREE.WebGLRenderTargetCube?M(d.texture,e):d instanceof THREE.WebGLRenderTarget?W.setTexture(d.texture,e):W.setTexture(d,e));else if("tv"===b){void 0===a._array&&(a._array=[]);b=0;for(f=a.value.length;b<f;b++)a._array[b]=D();r.uniform1iv(c,a._array);b=0;for(f=a.value.length;b<f;b++)d=a.value[b],e=a._array[b],d&&(d instanceof THREE.CubeTexture||d.image instanceof Array&&6===d.image.length?B(d,e):d instanceof THREE.WebGLRenderTarget?W.setTexture(d.texture,e):d instanceof THREE.WebGLRenderTargetCube?
-M(d.texture,e):W.setTexture(d,e))}else console.warn("THREE.WebGLRenderer: Unknown uniform type: "+b)}function C(a){for(var b=0,c=a.length;b<c;b++){var d=a[b][0];!1!==d.needsUpdate&&x(d,d.type,a[b][1],d.value)}}function y(a,b,c,d){var e=null!==a?a.length:0,f=null;if(0!==e){f=fa.value;if(!0!==d||null===f){var g=c+4*e;b=b.matrixWorldInverse;d=Pa.getNormalMatrix(b);if(null===f||f.length<g)f=new Float32Array(g);for(g=0;g!==e;++g,c+=4){var h=Qa.copy(a[g]).applyMatrix4(b,d);h.normal.toArray(f,c);f[c+3]=
-h.constant}}fa.value=f;fa.needsUpdate=!0}ca=e;return f}function z(){fa.value!==Aa&&(fa.value=Aa,fa.needsUpdate=0<ua);ca=ua}function A(a,b,c){c?(r.texParameteri(a,r.TEXTURE_WRAP_S,I(b.wrapS)),r.texParameteri(a,r.TEXTURE_WRAP_T,I(b.wrapT)),r.texParameteri(a,r.TEXTURE_MAG_FILTER,I(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,I(b.minFilter))):(r.texParameteri(a,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(a,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===
-THREE.ClampToEdgeWrapping||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",b),r.texParameteri(a,r.TEXTURE_MAG_FILTER,K(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,K(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",b));!(c=
-V.get("EXT_texture_filter_anisotropic"))||b.type===THREE.FloatType&&null===V.get("OES_texture_float_linear")||b.type===THREE.HalfFloatType&&null===V.get("OES_texture_half_float_linear")||!(1<b.anisotropy||U.get(b).__currentAnisotropy)||(r.texParameterf(a,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,W.getMaxAnisotropy())),U.get(b).__currentAnisotropy=b.anisotropy)}function E(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*
-c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function F(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function B(a,b){var c=U.get(a);if(6===a.image.length)if(0<a.version&&c.__version!==a.version){c.__image__webglTextureCube||(a.addEventListener("dispose",f),c.__image__webglTextureCube=
-r.createTexture(),la.textures++);L.activeTexture(r.TEXTURE0+b);L.bindTexture(r.TEXTURE_CUBE_MAP,c.__image__webglTextureCube);r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,a.flipY);for(var d=a instanceof THREE.CompressedTexture,e=a.image[0]instanceof THREE.DataTexture,g=[],h=0;6>h;h++)g[h]=!W.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:E(a.image[h],da.maxCubemapSize);var k=F(g[0]),m=I(a.format),l=I(a.type);A(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;q<s;q++)n=
-p[q],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<L.getCompressedTextureFormats().indexOf(m)?L.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,m,n.width,n.height,0,n.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):L.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,m,n.width,n.height,0,m,l,n.data);else e?L.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,m,g[h].width,g[h].height,0,m,l,g[h].data):L.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+
-h,0,m,m,l,g[h]);a.generateMipmaps&&k&&r.generateMipmap(r.TEXTURE_CUBE_MAP);c.__version=a.version;if(a.onUpdate)a.onUpdate(a)}else L.activeTexture(r.TEXTURE0+b),L.bindTexture(r.TEXTURE_CUBE_MAP,c.__image__webglTextureCube)}function M(a,b){L.activeTexture(r.TEXTURE0+b);L.bindTexture(r.TEXTURE_CUBE_MAP,U.get(a).__webglTexture)}function J(a,b,c,d){var e=I(b.texture.format),f=I(b.texture.type);L.texImage2D(d,0,e,b.width,b.height,0,e,f,null);r.bindFramebuffer(r.FRAMEBUFFER,a);r.framebufferTexture2D(r.FRAMEBUFFER,
-c,d,U.get(b.texture).__webglTexture,0);r.bindFramebuffer(r.FRAMEBUFFER,null)}function O(a,b){r.bindRenderbuffer(r.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT16,b.width,b.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,b.width,b.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,
-a)):r.renderbufferStorage(r.RENDERBUFFER,r.RGBA4,b.width,b.height);r.bindRenderbuffer(r.RENDERBUFFER,null)}function K(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?r.NEAREST:r.LINEAR}function I(a){var b;if(a===THREE.RepeatWrapping)return r.REPEAT;if(a===THREE.ClampToEdgeWrapping)return r.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return r.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return r.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return r.NEAREST_MIPMAP_NEAREST;
+THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===Z&&(a*=d,b*=d,c*=d);K.clearColor(a,b,c,d)}function c(){K.init();K.scissor(va.copy(Ga).multiplyScalar(aa));K.viewport(na.copy(oa).multiplyScalar(aa));b(ba.r,ba.g,ba.b,ka)}function d(){ga=Ha=null;pa="";qa=-1;K.reset()}function e(a){a.preventDefault();d();c();T.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=T.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===
+b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}T.delete(a)}la.textures--}function g(a){a=a.target;a.removeEventListener("dispose",g);var b=T.get(a),c=T.get(a.texture);if(a){void 0!==c.__webglTexture&&r.deleteTexture(c.__webglTexture);a.depthTexture&&a.depthTexture.dispose();if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),b.__webglDepthbuffer&&r.deleteRenderbuffer(b.__webglDepthbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),
+b.__webglDepthbuffer&&r.deleteRenderbuffer(b.__webglDepthbuffer);T.delete(a.texture);T.delete(a)}la.textures--}function h(a){a=a.target;a.removeEventListener("dispose",h);k(a);T.delete(a)}function k(a){var b=T.get(a).program;a.program=void 0;void 0!==b&&ra.releaseProgram(b)}function l(a,b){return Math.abs(b[0])-Math.abs(a[0])}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==
+b.z?a.z-b.z:a.id-b.id}function p(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function m(a,b,c,d,e){var f;c.transparent?(d=ha,f=++ma):(d=X,f=++ia);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=Y.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:Y.z,group:e},d.push(f))}function q(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();var c=Pa.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);
+if(!La.intersectsSphere(c))return!1;if(0===ca)return!0;a=W.clippingPlanes;var b=c.center,c=-c.radius,d=0;do if(a[d].distanceToPoint(b)<c)return!1;while(++d!==ca);return!0}function u(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)$.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==q(a)||Ia.push(a);else if(a instanceof THREE.LensFlare)Ja.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===W.sortObjects&&(Y.setFromMatrixPosition(a.matrixWorld),
+Y.applyProjection(wa)),m(a,null,a.material,Y.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===q(a)){var c=a.material;if(!0===c.visible){!0===W.sortObjects&&(Y.setFromMatrixPosition(a.matrixWorld),Y.applyProjection(wa));var d=sa.update(a);if(c instanceof THREE.MultiMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c<g;c++){var h=e[c],k=f[h.materialIndex];!0===k.visible&&
+m(a,d,k,Y.z,h)}else m(a,d,c,Y.z,null)}}d=a.children;c=0;for(g=d.length;c<g;c++)u(d[c],b)}}function v(a,b,c,d){for(var e=0,f=a.length;e<f;e++){var g=a[e],h=g.object,k=g.geometry,l=void 0===d?g.material:d,g=g.group;h.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,h.matrixWorld);h.normalMatrix.getNormalMatrix(h.modelViewMatrix);if(h instanceof THREE.ImmediateRenderObject){t(l);var m=s(b,c,l,h);pa="";h.render(function(a){W.renderBufferImmediate(a,m,l)})}else W.renderBufferDirect(b,c,k,l,h,g)}}
+function t(a){a.side!==THREE.DoubleSide?K.enable(r.CULL_FACE):K.disable(r.CULL_FACE);K.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?K.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha):K.setBlending(THREE.NoBlending);K.setDepthFunc(a.depthFunc);K.setDepthTest(a.depthTest);K.setDepthWrite(a.depthWrite);K.setColorWrite(a.colorWrite);K.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}
+function s(a,b,c,d){xa=0;var e=T.get(c);if(ya){if(za||a!==ga){var f=c.clippingPlanes,g=a===ga&&c.id===qa;if(!za||null===f||0===f.length||ta&&!c.clipShadows)ta?y(null):z();else{var l=ta?0:ua,m=4*l,n=e.clippingState||null;fa.value=n;n=y(f,a,m,g);for(f=0;f!==m;++f)n[f]=Aa[f];e.clippingState=n;ca+=l}}void 0!==e.numClippingPlanes&&e.numClippingPlanes!==ca&&(c.needsUpdate=!0)}void 0===e.program&&(c.needsUpdate=!0);void 0!==e.lightsHash&&e.lightsHash!==S.hash&&(c.needsUpdate=!0);if(c.needsUpdate){a:{l=T.get(c);
+m=ra.getParameters(c,S,b,ca,d);n=ra.getProgramCode(c,m);f=l.program;g=!0;if(void 0===f)c.addEventListener("dispose",h);else if(f.code!==n)k(c);else if(void 0!==m.shaderID)break a;else g=!1;g&&(m.shaderID?(f=THREE.ShaderLib[m.shaderID],l.__webglShader={name:c.type,uniforms:THREE.UniformsUtils.clone(f.uniforms),vertexShader:f.vertexShader,fragmentShader:f.fragmentShader}):l.__webglShader={name:c.type,uniforms:c.uniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader},c.__webglShader=l.__webglShader,
+f=ra.acquireProgram(c,m,n),l.program=f,c.program=f);m=f.getAttributes();if(c.morphTargets)for(n=c.numSupportedMorphTargets=0;n<W.maxMorphTargets;n++)0<=m["morphTarget"+n]&&c.numSupportedMorphTargets++;if(c.morphNormals)for(n=c.numSupportedMorphNormals=0;n<W.maxMorphNormals;n++)0<=m["morphNormal"+n]&&c.numSupportedMorphNormals++;m=l.__webglShader.uniforms;(c instanceof THREE.ShaderMaterial||c instanceof THREE.RawShaderMaterial)&&!0!==c.clipping||(l.numClippingPlanes=ca,m.clippingPlanes=fa);n=l.program.getUniforms();
+l.uniformsList=[];for(var p in m)(f=n[p])&&l.uniformsList.push([l.__webglShader.uniforms[p],f]);if(c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshStandardMaterial||c.lights)l.lightsHash=S.hash,m.ambientLightColor.value=S.ambient,m.directionalLights.value=S.directional,m.spotLights.value=S.spot,m.pointLights.value=S.point,m.hemisphereLights.value=S.hemi,m.directionalShadowMap.value=S.directionalShadowMap,m.directionalShadowMatrix.value=S.directionalShadowMatrix,
+m.spotShadowMap.value=S.spotShadowMap,m.spotShadowMatrix.value=S.spotShadowMatrix,m.pointShadowMap.value=S.pointShadowMap,m.pointShadowMatrix.value=S.pointShadowMatrix;l.hasDynamicUniforms=!1;p=0;for(m=l.uniformsList.length;p<m;p++)if(!0===l.uniformsList[p][0].dynamic){l.hasDynamicUniforms=!0;break}}c.needsUpdate=!1}f=n=g=!1;p=e.program;l=p.getUniforms();m=e.__webglShader.uniforms;p.id!==Ha&&(r.useProgram(p.program),Ha=p.id,f=n=g=!0);c.id!==qa&&(qa=c.id,n=!0);if(g||a!==ga)r.uniformMatrix4fv(l.projectionMatrix,
+!1,a.projectionMatrix.elements),da.logarithmicDepthBuffer&&r.uniform1f(l.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==ga&&(ga=a,f=n=!0),(c instanceof THREE.ShaderMaterial||c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshStandardMaterial||c.envMap)&&void 0!==l.cameraPosition&&(Y.setFromMatrixPosition(a.matrixWorld),r.uniform3f(l.cameraPosition,Y.x,Y.y,Y.z)),(c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshBasicMaterial||c instanceof
+THREE.MeshStandardMaterial||c instanceof THREE.ShaderMaterial||c.skinning)&&void 0!==l.viewMatrix&&r.uniformMatrix4fv(l.viewMatrix,!1,a.matrixWorldInverse.elements),void 0!==l.toneMappingExposure&&r.uniform1f(l.toneMappingExposure,W.toneMappingExposure),void 0!==l.toneMappingWhitePoint&&r.uniform1f(l.toneMappingWhitePoint,W.toneMappingWhitePoint);c.skinning&&(d.bindMatrix&&void 0!==l.bindMatrix&&r.uniformMatrix4fv(l.bindMatrix,!1,d.bindMatrix.elements),d.bindMatrixInverse&&void 0!==l.bindMatrixInverse&&
+r.uniformMatrix4fv(l.bindMatrixInverse,!1,d.bindMatrixInverse.elements),da.floatVertexTextures&&d.skeleton&&d.skeleton.useVertexTexture?(void 0!==l.boneTexture&&(g=D(),r.uniform1i(l.boneTexture,g),W.setTexture(d.skeleton.boneTexture,g)),void 0!==l.boneTextureWidth&&r.uniform1i(l.boneTextureWidth,d.skeleton.boneTextureWidth),void 0!==l.boneTextureHeight&&r.uniform1i(l.boneTextureHeight,d.skeleton.boneTextureHeight)):d.skeleton&&d.skeleton.boneMatrices&&void 0!==l.boneGlobalMatrices&&r.uniformMatrix4fv(l.boneGlobalMatrices,
+!1,d.skeleton.boneMatrices));if(n){if(c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshStandardMaterial||c.lights)n=f,m.ambientLightColor.needsUpdate=n,m.directionalLights.needsUpdate=n,m.pointLights.needsUpdate=n,m.spotLights.needsUpdate=n,m.hemisphereLights.needsUpdate=n;b&&c.fog&&(m.fogColor.value=b.color,b instanceof THREE.Fog?(m.fogNear.value=b.near,m.fogFar.value=b.far):b instanceof THREE.FogExp2&&(m.fogDensity.value=b.density));if(c instanceof
+THREE.MeshBasicMaterial||c instanceof THREE.MeshLambertMaterial||c instanceof THREE.MeshPhongMaterial||c instanceof THREE.MeshStandardMaterial){m.opacity.value=c.opacity;m.diffuse.value=c.color;c.emissive&&m.emissive.value.copy(c.emissive).multiplyScalar(c.emissiveIntensity);m.map.value=c.map;m.specularMap.value=c.specularMap;m.alphaMap.value=c.alphaMap;c.aoMap&&(m.aoMap.value=c.aoMap,m.aoMapIntensity.value=c.aoMapIntensity);var q;c.map?q=c.map:c.specularMap?q=c.specularMap:c.displacementMap?q=c.displacementMap:
+c.normalMap?q=c.normalMap:c.bumpMap?q=c.bumpMap:c.roughnessMap?q=c.roughnessMap:c.metalnessMap?q=c.metalnessMap:c.alphaMap?q=c.alphaMap:c.emissiveMap&&(q=c.emissiveMap);void 0!==q&&(q instanceof THREE.WebGLRenderTarget&&(q=q.texture),b=q.offset,q=q.repeat,m.offsetRepeat.value.set(b.x,b.y,q.x,q.y));m.envMap.value=c.envMap;m.flipEnvMap.value=c.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;m.reflectivity.value=c.reflectivity;m.refractionRatio.value=c.refractionRatio}c instanceof THREE.LineBasicMaterial?
+(m.diffuse.value=c.color,m.opacity.value=c.opacity):c instanceof THREE.LineDashedMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.dashSize.value=c.dashSize,m.totalSize.value=c.dashSize+c.gapSize,m.scale.value=c.scale):c instanceof THREE.PointsMaterial?(m.diffuse.value=c.color,m.opacity.value=c.opacity,m.size.value=c.size*aa,m.scale.value=.5*H.clientHeight,m.map.value=c.map,null!==c.map&&(q=c.map.offset,c=c.map.repeat,m.offsetRepeat.value.set(q.x,q.y,c.x,c.y))):c instanceof THREE.MeshLambertMaterial?
+(c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=c.lightMapIntensity),c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap)):c instanceof THREE.MeshPhongMaterial?(m.specular.value=c.specular,m.shininess.value=Math.max(c.shininess,1E-4),c.lightMap&&(m.lightMap.value=c.lightMap,m.lightMapIntensity.value=c.lightMapIntensity),c.emissiveMap&&(m.emissiveMap.value=c.emissiveMap),c.bumpMap&&(m.bumpMap.value=c.bumpMap,m.bumpScale.value=c.bumpScale),c.normalMap&&(m.normalMap.value=c.normalMap,
+m.normalScale.value.copy(c.normalScale)),c.displacementMap&&(m.displacementMap.value=c.displacementMap,m.displacementScale.value=c.displacementScale,m.displacementBias.value=c.displacementBias)):c instanceof THREE.MeshPhysicalMaterial?w(m,c):c instanceof THREE.MeshStandardMaterial?w(m,c):c instanceof THREE.MeshDepthMaterial?(m.mNear.value=a.near,m.mFar.value=a.far,m.opacity.value=c.opacity):c instanceof THREE.MeshNormalMaterial&&(m.opacity.value=c.opacity);C(e.uniformsList)}r.uniformMatrix4fv(l.modelViewMatrix,
+!1,d.modelViewMatrix.elements);l.normalMatrix&&r.uniformMatrix3fv(l.normalMatrix,!1,d.normalMatrix.elements);void 0!==l.modelMatrix&&r.uniformMatrix4fv(l.modelMatrix,!1,d.matrixWorld.elements);if(!0===e.hasDynamicUniforms){e=e.uniformsList;c=[];q=0;for(b=e.length;q<b;q++)l=e[q][0],m=l.onUpdateCallback,void 0!==m&&(m.bind(l)(d,a),c.push(e[q]));C(c)}return p}function w(a,b){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&
+(a.metalnessMap.value=b.metalnessMap);b.lightMap&&(a.lightMap.value=b.lightMap,a.lightMapIntensity.value=b.lightMapIntensity);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale);b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale));b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);b.envMap&&(a.envMapIntensity.value=
+b.envMapIntensity)}function D(){var a=xa;a>=da.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+da.maxTextures);xa+=1;return a}function x(a,b,c,d){var e;if("1i"===b)r.uniform1i(c,d);else if("1f"===b)r.uniform1f(c,d);else if("2f"===b)r.uniform2f(c,d[0],d[1]);else if("3f"===b)r.uniform3f(c,d[0],d[1],d[2]);else if("4f"===b)r.uniform4f(c,d[0],d[1],d[2],d[3]);else if("1iv"===b)r.uniform1iv(c,d);else if("3iv"===b)r.uniform3iv(c,d);else if("1fv"===
+b)r.uniform1fv(c,d);else if("2fv"===b)r.uniform2fv(c,d);else if("3fv"===b)r.uniform3fv(c,d);else if("4fv"===b)r.uniform4fv(c,d);else if("Matrix2fv"===b)r.uniformMatrix2fv(c,!1,d);else if("Matrix3fv"===b)r.uniformMatrix3fv(c,!1,d);else if("Matrix4fv"===b)r.uniformMatrix4fv(c,!1,d);else if("i"===b)r.uniform1i(c,d);else if("f"===b)r.uniform1f(c,d);else if("iv1"===b)r.uniform1iv(c,d);else if("iv"===b)r.uniform3iv(c,d);else if("fv1"===b)r.uniform1fv(c,d);else if("fv"===b)r.uniform3fv(c,d);else if("v2"===
+b)r.uniform2f(c,d.x,d.y);else if("v3"===b)r.uniform3f(c,d.x,d.y,d.z);else if("v4"===b)r.uniform4f(c,d.x,d.y,d.z,d.w);else if("c"===b)r.uniform3f(c,d.r,d.g,d.b);else if("s"===b){a=a.properties;for(var f in a){e=a[f];var g=c[f],h=d[f];x(e,e.type,g,h)}}else if("sa"===b){a=a.properties;b=0;for(var k=d.length;b<k;b++)for(f in a)e=a[f],g=c[b][f],h=d[b][f],x(e,e.type,g,h)}else if("v2v"===b){void 0===a._array&&(a._array=new Float32Array(2*d.length));e=b=0;for(f=d.length;b<f;b++,e+=2)a._array[e+0]=d[b].x,
+a._array[e+1]=d[b].y;r.uniform2fv(c,a._array)}else if("v3v"===b){void 0===a._array&&(a._array=new Float32Array(3*d.length));e=b=0;for(f=d.length;b<f;b++,e+=3)a._array[e+0]=d[b].x,a._array[e+1]=d[b].y,a._array[e+2]=d[b].z;r.uniform3fv(c,a._array)}else if("v4v"===b){void 0===a._array&&(a._array=new Float32Array(4*d.length));e=b=0;for(f=d.length;b<f;b++,e+=4)a._array[e+0]=d[b].x,a._array[e+1]=d[b].y,a._array[e+2]=d[b].z,a._array[e+3]=d[b].w;r.uniform4fv(c,a._array)}else if("m2"===b)r.uniformMatrix2fv(c,
+!1,d.elements);else if("m3"===b)r.uniformMatrix3fv(c,!1,d.elements);else if("m3v"===b){void 0===a._array&&(a._array=new Float32Array(9*d.length));b=0;for(f=d.length;b<f;b++)d[b].flattenToArrayOffset(a._array,9*b);r.uniformMatrix3fv(c,!1,a._array)}else if("m4"===b)r.uniformMatrix4fv(c,!1,d.elements);else if("m4v"===b){void 0===a._array&&(a._array=new Float32Array(16*d.length));b=0;for(f=d.length;b<f;b++)d[b].flattenToArrayOffset(a._array,16*b);r.uniformMatrix4fv(c,!1,a._array)}else if("t"===b)e=D(),
+r.uniform1i(c,e),d&&(d instanceof THREE.CubeTexture||Array.isArray(d.image)&&6===d.image.length?B(d,e):d instanceof THREE.WebGLRenderTargetCube?M(d.texture,e):d instanceof THREE.WebGLRenderTarget?W.setTexture(d.texture,e):W.setTexture(d,e));else if("tv"===b){void 0===a._array&&(a._array=[]);b=0;for(f=a.value.length;b<f;b++)a._array[b]=D();r.uniform1iv(c,a._array);b=0;for(f=a.value.length;b<f;b++)d=a.value[b],e=a._array[b],d&&(d instanceof THREE.CubeTexture||d.image instanceof Array&&6===d.image.length?
+B(d,e):d instanceof THREE.WebGLRenderTarget?W.setTexture(d.texture,e):d instanceof THREE.WebGLRenderTargetCube?M(d.texture,e):W.setTexture(d,e))}else console.warn("THREE.WebGLRenderer: Unknown uniform type: "+b)}function C(a){for(var b=0,c=a.length;b<c;b++){var d=a[b][0];!1!==d.needsUpdate&&x(d,d.type,a[b][1],d.value)}}function y(a,b,c,d){var e=null!==a?a.length:0,f=null;if(0!==e){f=fa.value;if(!0!==d||null===f){var g=c+4*e;b=b.matrixWorldInverse;d=Qa.getNormalMatrix(b);if(null===f||f.length<g)f=
+new Float32Array(g);for(g=0;g!==e;++g,c+=4){var h=Ra.copy(a[g]).applyMatrix4(b,d);h.normal.toArray(f,c);f[c+3]=h.constant}}fa.value=f;fa.needsUpdate=!0}ca=e;return f}function z(){fa.value!==Aa&&(fa.value=Aa,fa.needsUpdate=0<ua);ca=ua}function A(a,b,c){c?(r.texParameteri(a,r.TEXTURE_WRAP_S,I(b.wrapS)),r.texParameteri(a,r.TEXTURE_WRAP_T,I(b.wrapT)),r.texParameteri(a,r.TEXTURE_MAG_FILTER,I(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,I(b.minFilter))):(r.texParameteri(a,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),
+r.texParameteri(a,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===THREE.ClampToEdgeWrapping||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",b),r.texParameteri(a,r.TEXTURE_MAG_FILTER,L(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,L(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",
+b));!(c=V.get("EXT_texture_filter_anisotropic"))||b.type===THREE.FloatType&&null===V.get("OES_texture_float_linear")||b.type===THREE.HalfFloatType&&null===V.get("OES_texture_half_float_linear")||!(1<b.anisotropy||T.get(b).__currentAnisotropy)||(r.texParameterf(a,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,W.getMaxAnisotropy())),T.get(b).__currentAnisotropy=b.anisotropy)}function E(a,b){if(a.width>b||a.height>b){var c=b/Math.max(a.width,a.height),d=document.createElement("canvas");d.width=Math.floor(a.width*
+c);d.height=Math.floor(a.height*c);d.getContext("2d").drawImage(a,0,0,a.width,a.height,0,0,d.width,d.height);console.warn("THREE.WebGLRenderer: image is too big ("+a.width+"x"+a.height+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function F(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function B(a,b){var c=T.get(a);if(6===a.image.length)if(0<a.version&&c.__version!==a.version){c.__image__webglTextureCube||(a.addEventListener("dispose",f),c.__image__webglTextureCube=
+r.createTexture(),la.textures++);K.activeTexture(r.TEXTURE0+b);K.bindTexture(r.TEXTURE_CUBE_MAP,c.__image__webglTextureCube);r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,a.flipY);for(var d=a instanceof THREE.CompressedTexture,e=a.image[0]instanceof THREE.DataTexture,g=[],h=0;6>h;h++)g[h]=!W.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:E(a.image[h],da.maxCubemapSize);var k=F(g[0]),m=I(a.format),l=I(a.type);A(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var n,p=g[h].mipmaps,q=0,s=p.length;q<s;q++)n=
+p[q],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<K.getCompressedTextureFormats().indexOf(m)?K.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,m,n.width,n.height,0,n.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,m,n.width,n.height,0,m,l,n.data);else e?K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,m,g[h].width,g[h].height,0,m,l,g[h].data):K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+
+h,0,m,m,l,g[h]);a.generateMipmaps&&k&&r.generateMipmap(r.TEXTURE_CUBE_MAP);c.__version=a.version;if(a.onUpdate)a.onUpdate(a)}else K.activeTexture(r.TEXTURE0+b),K.bindTexture(r.TEXTURE_CUBE_MAP,c.__image__webglTextureCube)}function M(a,b){K.activeTexture(r.TEXTURE0+b);K.bindTexture(r.TEXTURE_CUBE_MAP,T.get(a).__webglTexture)}function J(a,b,c,d){var e=I(b.texture.format),f=I(b.texture.type);K.texImage2D(d,0,e,b.width,b.height,0,e,f,null);r.bindFramebuffer(r.FRAMEBUFFER,a);r.framebufferTexture2D(r.FRAMEBUFFER,
+c,d,T.get(b.texture).__webglTexture,0);r.bindFramebuffer(r.FRAMEBUFFER,null)}function O(a,b){r.bindRenderbuffer(r.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT16,b.width,b.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,a)):b.depthBuffer&&b.stencilBuffer?(r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,b.width,b.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,
+a)):r.renderbufferStorage(r.RENDERBUFFER,r.RGBA4,b.width,b.height);r.bindRenderbuffer(r.RENDERBUFFER,null)}function L(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?r.NEAREST:r.LINEAR}function I(a){var b;if(a===THREE.RepeatWrapping)return r.REPEAT;if(a===THREE.ClampToEdgeWrapping)return r.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return r.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return r.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return r.NEAREST_MIPMAP_NEAREST;
 if(a===THREE.NearestMipMapLinearFilter)return r.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return r.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return r.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return r.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return r.UNSIGNED_BYTE;if(a===THREE.UnsignedShort4444Type)return r.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return r.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return r.UNSIGNED_SHORT_5_6_5;
 if(a===THREE.ByteType)return r.BYTE;if(a===THREE.ShortType)return r.SHORT;if(a===THREE.UnsignedShortType)return r.UNSIGNED_SHORT;if(a===THREE.IntType)return r.INT;if(a===THREE.UnsignedIntType)return r.UNSIGNED_INT;if(a===THREE.FloatType)return r.FLOAT;b=V.get("OES_texture_half_float");if(null!==b&&a===THREE.HalfFloatType)return b.HALF_FLOAT_OES;if(a===THREE.AlphaFormat)return r.ALPHA;if(a===THREE.RGBFormat)return r.RGB;if(a===THREE.RGBAFormat)return r.RGBA;if(a===THREE.LuminanceFormat)return r.LUMINANCE;
-if(a===THREE.LuminanceAlphaFormat)return r.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return r.FUNC_ADD;if(a===THREE.SubtractEquation)return r.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return r.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return r.ZERO;if(a===THREE.OneFactor)return r.ONE;if(a===THREE.SrcColorFactor)return r.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return r.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return r.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return r.ONE_MINUS_SRC_ALPHA;
-if(a===THREE.DstAlphaFactor)return r.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return r.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return r.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return r.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return r.SRC_ALPHA_SATURATE;b=V.get("WEBGL_compressed_texture_s3tc");if(null!==b){if(a===THREE.RGB_S3TC_DXT1_Format)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT3_Format)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;
-if(a===THREE.RGBA_S3TC_DXT5_Format)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}b=V.get("WEBGL_compressed_texture_pvrtc");if(null!==b){if(a===THREE.RGB_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(a===THREE.RGB_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(a===THREE.RGBA_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(a===THREE.RGBA_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}b=V.get("WEBGL_compressed_texture_etc1");if(null!==b&&a===
-THREE.RGB_ETC1_Format)return b.COMPRESSED_RGB_ETC1_WEBGL;b=V.get("EXT_blend_minmax");if(null!==b){if(a===THREE.MinEquation)return b.MIN_EXT;if(a===THREE.MaxEquation)return b.MAX_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var H=void 0!==a.canvas?a.canvas:document.createElement("canvas"),P=void 0!==a.context?a.context:null,R=void 0!==a.alpha?a.alpha:!1,Q=void 0!==a.depth?a.depth:!0,N=void 0!==a.stencil?a.stencil:!0,G=void 0!==a.antialias?a.antialias:!1,Z=void 0!==a.premultipliedAlpha?
-a.premultipliedAlpha:!0,T=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,$=[],X=[],ia=-1,ha=[],ma=-1,ea=new Float32Array(8),Ia=[],Ja=[];this.domElement=H;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1;this.toneMapping=THREE.LinearToneMapping;this.toneMappingWhitePoint=this.toneMappingExposure=
-1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;var W=this,Ha=null,Ba=null,Ca=null,qa=-1,pa="",ga=null,va=new THREE.Vector4,Ka=null,na=new THREE.Vector4,xa=0,ba=new THREE.Color(0),ka=0,Da=H.width,Ea=H.height,aa=1,Ga=new THREE.Vector4(0,0,Da,Ea),Ma=!1,oa=new THREE.Vector4(0,0,Da,Ea),La=new THREE.Frustum,ya=!1,za=!1,ta=!1,ca=0,fa={type:"4fv",value:null,needsUpdate:!1},Aa=null,ua=0,Pa=new THREE.Matrix3,Oa=new THREE.Sphere,Qa=new THREE.Plane,wa=new THREE.Matrix4,Y=new THREE.Vector3,
-S={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},la={geometries:0,textures:0},ja={calls:0,vertices:0,faces:0,points:0};this.info={render:ja,memory:la,programs:null};var r;try{R={alpha:R,depth:Q,stencil:N,antialias:G,premultipliedAlpha:Z,preserveDrawingBuffer:T};r=P||H.getContext("webgl",R)||H.getContext("experimental-webgl",R);if(null===r){if(null!==
-H.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}void 0===r.getShaderPrecisionFormat&&(r.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});H.addEventListener("webglcontextlost",e,!1)}catch(Ra){console.error("THREE.WebGLRenderer: "+Ra)}var V=new THREE.WebGLExtensions(r);V.get("OES_texture_float");V.get("OES_texture_float_linear");V.get("OES_texture_half_float");V.get("OES_texture_half_float_linear");
-V.get("OES_standard_derivatives");V.get("ANGLE_instanced_arrays");V.get("OES_element_index_uint")&&(THREE.BufferGeometry.MaxIndex=4294967296);var da=new THREE.WebGLCapabilities(r,V,a),L=new THREE.WebGLState(r,V,I),U=new THREE.WebGLProperties,sa=new THREE.WebGLObjects(r,U,this.info),ra=new THREE.WebGLPrograms(this,da),Fa=new THREE.WebGLLights;this.info.programs=ra.programs;var Sa=new THREE.WebGLBufferRenderer(r,V,ja),Ta=new THREE.WebGLIndexedBufferRenderer(r,V,ja);c();this.context=r;this.capabilities=
-da;this.extensions=V;this.properties=U;this.state=L;var Na=new THREE.WebGLShadowMap(this,S,sa);this.shadowMap=Na;var Ua=new THREE.SpritePlugin(this,Ia),Va=new THREE.LensFlarePlugin(this,Ja);this.getContext=function(){return r};this.getContextAttributes=function(){return r.getContextAttributes()};this.forceContextLoss=function(){V.get("WEBGL_lose_context").loseContext()};this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==a)return a;var b=V.get("EXT_texture_filter_anisotropic");return a=
-null!==b?r.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}();this.getPrecision=function(){return da.precision};this.getPixelRatio=function(){return aa};this.setPixelRatio=function(a){void 0!==a&&(aa=a,this.setSize(oa.z,oa.w,!1))};this.getSize=function(){return{width:Da,height:Ea}};this.setSize=function(a,b,c){Da=a;Ea=b;H.width=a*aa;H.height=b*aa;!1!==c&&(H.style.width=a+"px",H.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){L.viewport(oa.set(a,b,c,d))};this.setScissor=
-function(a,b,c,d){L.scissor(Ga.set(a,b,c,d))};this.setScissorTest=function(a){L.setScissorTest(Ma=a)};this.getClearColor=function(){return ba};this.setClearColor=function(a,c){ba.set(a);ka=void 0!==c?c:1;b(ba.r,ba.g,ba.b,ka)};this.getClearAlpha=function(){return ka};this.setClearAlpha=function(a){ka=a;b(ba.r,ba.g,ba.b,ka)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=r.COLOR_BUFFER_BIT;if(void 0===b||b)d|=r.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=r.STENCIL_BUFFER_BIT;r.clear(d)};this.clearColor=
-function(){this.clear(!0,!1,!1)};this.clearDepth=function(){this.clear(!1,!0,!1)};this.clearStencil=function(){this.clear(!1,!1,!0)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.resetGLState=d;this.dispose=function(){H.removeEventListener("webglcontextlost",e,!1)};this.renderBufferImmediate=function(a,b,c){L.initAttributes();var d=U.get(a);a.hasPositions&&!d.position&&(d.position=r.createBuffer());a.hasNormals&&!d.normal&&(d.normal=r.createBuffer());a.hasUvs&&
-!d.uv&&(d.uv=r.createBuffer());a.hasColors&&!d.color&&(d.color=r.createBuffer());b=b.getAttributes();a.hasPositions&&(r.bindBuffer(r.ARRAY_BUFFER,d.position),r.bufferData(r.ARRAY_BUFFER,a.positionArray,r.DYNAMIC_DRAW),L.enableAttribute(b.position),r.vertexAttribPointer(b.position,3,r.FLOAT,!1,0,0));if(a.hasNormals){r.bindBuffer(r.ARRAY_BUFFER,d.normal);if("MeshPhongMaterial"!==c.type&&"MeshStandardMaterial"!==c.type&&"MeshPhysicalMaterial"!==c.type&&c.shading===THREE.FlatShading)for(var e=0,f=3*a.count;e<
-f;e+=9){var g=a.normalArray,h=(g[e+0]+g[e+3]+g[e+6])/3,k=(g[e+1]+g[e+4]+g[e+7])/3,m=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=m;g[e+3]=h;g[e+4]=k;g[e+5]=m;g[e+6]=h;g[e+7]=k;g[e+8]=m}r.bufferData(r.ARRAY_BUFFER,a.normalArray,r.DYNAMIC_DRAW);L.enableAttribute(b.normal);r.vertexAttribPointer(b.normal,3,r.FLOAT,!1,0,0)}a.hasUvs&&c.map&&(r.bindBuffer(r.ARRAY_BUFFER,d.uv),r.bufferData(r.ARRAY_BUFFER,a.uvArray,r.DYNAMIC_DRAW),L.enableAttribute(b.uv),r.vertexAttribPointer(b.uv,2,r.FLOAT,!1,0,0));
-a.hasColors&&c.vertexColors!==THREE.NoColors&&(r.bindBuffer(r.ARRAY_BUFFER,d.color),r.bufferData(r.ARRAY_BUFFER,a.colorArray,r.DYNAMIC_DRAW),L.enableAttribute(b.color),r.vertexAttribPointer(b.color,3,r.FLOAT,!1,0,0));L.disableUnusedAttributes();r.drawArrays(r.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){t(d);var g=s(a,b,d,e),h=!1;a=c.id+"_"+g.id+"_"+d.wireframe;a!==pa&&(pa=a,h=!0);b=e.morphTargetInfluences;if(void 0!==b){a=[];for(var k=0,h=b.length;k<h;k++){var m=
-b[k];a.push([m,k])}a.sort(l);8<a.length&&(a.length=8);for(var n=c.morphAttributes,k=0,h=a.length;k<h;k++)m=a[k],ea[k]=m[0],0!==m[0]?(b=m[1],!0===d.morphTargets&&n.position&&c.addAttribute("morphTarget"+k,n.position[b]),!0===d.morphNormals&&n.normal&&c.addAttribute("morphNormal"+k,n.normal[b])):(!0===d.morphTargets&&c.removeAttribute("morphTarget"+k),!0===d.morphNormals&&c.removeAttribute("morphNormal"+k));a=g.getUniforms();null!==a.morphTargetInfluences&&r.uniform1fv(a.morphTargetInfluences,ea);h=
-!0}b=c.index;k=c.attributes.position;!0===d.wireframe&&(b=sa.getWireframeAttribute(c));null!==b?(a=Ta,a.setIndex(b)):a=Sa;if(h){a:{var h=void 0,p;if(c instanceof THREE.InstancedBufferGeometry&&(p=V.get("ANGLE_instanced_arrays"),null===p)){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");break a}void 0===h&&(h=0);L.initAttributes();var m=c.attributes,g=g.getAttributes(),n=d.defaultAttributeValues,
-q;for(q in g){var u=g[q];if(0<=u){var v=m[q];if(void 0!==v){var w=v.itemSize,x=sa.getAttributeBuffer(v);if(v instanceof THREE.InterleavedBufferAttribute){var X=v.data,y=X.stride,v=v.offset;X instanceof THREE.InstancedInterleavedBuffer?(L.enableAttributeAndDivisor(u,X.meshPerAttribute,p),void 0===c.maxInstancedCount&&(c.maxInstancedCount=X.meshPerAttribute*X.count)):L.enableAttribute(u);r.bindBuffer(r.ARRAY_BUFFER,x);r.vertexAttribPointer(u,w,r.FLOAT,!1,y*X.array.BYTES_PER_ELEMENT,(h*y+v)*X.array.BYTES_PER_ELEMENT)}else v instanceof
-THREE.InstancedBufferAttribute?(L.enableAttributeAndDivisor(u,v.meshPerAttribute,p),void 0===c.maxInstancedCount&&(c.maxInstancedCount=v.meshPerAttribute*v.count)):L.enableAttribute(u),X=r.FLOAT,y=!1,v=v.array,v instanceof Uint8Array&&(X=r.UNSIGNED_BYTE,y=!0),r.bindBuffer(r.ARRAY_BUFFER,x),r.vertexAttribPointer(u,w,X,y,0,h*w*v.BYTES_PER_ELEMENT)}else if(void 0!==n&&(w=n[q],void 0!==w))switch(w.length){case 2:r.vertexAttrib2fv(u,w);break;case 3:r.vertexAttrib3fv(u,w);break;case 4:r.vertexAttrib4fv(u,
-w);break;default:r.vertexAttrib1fv(u,w)}}}L.disableUnusedAttributes()}null!==b&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,sa.getAttributeBuffer(b))}p=Infinity;null!==b?p=b.count:void 0!==k&&(p=k.count);q=c.drawRange.start;b=c.drawRange.count;k=null!==f?f.start:0;h=null!==f?f.count:Infinity;f=Math.max(0,q,k);p=Math.min(0+p,q+b,k+h)-1;p=Math.max(0,p-f+1);if(e instanceof THREE.Mesh)if(!0===d.wireframe)L.setLineWidth(d.wireframeLinewidth*(null===Ba?aa:1)),a.setMode(r.LINES);else switch(e.drawMode){case THREE.TrianglesDrawMode:a.setMode(r.TRIANGLES);
-break;case THREE.TriangleStripDrawMode:a.setMode(r.TRIANGLE_STRIP);break;case THREE.TriangleFanDrawMode:a.setMode(r.TRIANGLE_FAN)}else e instanceof THREE.Line?(d=d.linewidth,void 0===d&&(d=1),L.setLineWidth(d*(null===Ba?aa:1)),e instanceof THREE.LineSegments?a.setMode(r.LINES):a.setMode(r.LINE_STRIP)):e instanceof THREE.Points&&a.setMode(r.POINTS);c instanceof THREE.InstancedBufferGeometry?0<c.maxInstancedCount&&a.renderInstances(c,f,p):a.render(f,p)};this.render=function(a,b,c,d){if(!1===b instanceof
-THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e=a.fog;pa="";qa=-1;ga=null;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);wa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);La.setFromMatrix(wa);$.length=0;ma=ia=-1;Ia.length=0;Ja.length=0;var f=this.clippingPlanes;ya=0!==W.clippingPlanes.length||W.localClippingEnabled||0!==ua||za;za=W.localClippingEnabled;
-Aa=y(f,b,0);ua=null!==f?f.length:0;u(a,b);X.length=ia+1;ha.length=ma+1;!0===W.sortObjects&&(X.sort(n),ha.sort(p));ya&&(ta=!0,y(null));for(var f=$,g=0,h=0,k=f.length;h<k;h++){var m=f[h];m.castShadow&&(S.shadows[g++]=m)}S.shadows.length=g;Na.render(a,b);for(var f=$,l=m=0,q=0,s,t,w,x=b.matrixWorldInverse,D=0,C=0,A=0,H=0,g=0,h=f.length;g<h;g++)if(k=f[g],s=k.color,t=k.intensity,w=k.distance,k instanceof THREE.AmbientLight)m+=s.r*t,l+=s.g*t,q+=s.b*t;else if(k instanceof THREE.DirectionalLight){var B=Fa.get(k);
-B.color.copy(k.color).multiplyScalar(k.intensity);B.direction.setFromMatrixPosition(k.matrixWorld);Y.setFromMatrixPosition(k.target.matrixWorld);B.direction.sub(Y);B.direction.transformDirection(x);if(B.shadow=k.castShadow)B.shadowBias=k.shadow.bias,B.shadowRadius=k.shadow.radius,B.shadowMapSize=k.shadow.mapSize;S.directionalShadowMap[D]=k.shadow.map;S.directionalShadowMatrix[D]=k.shadow.matrix;S.directional[D++]=B}else if(k instanceof THREE.SpotLight){B=Fa.get(k);B.position.setFromMatrixPosition(k.matrixWorld);
-B.position.applyMatrix4(x);B.color.copy(s).multiplyScalar(t);B.distance=w;B.direction.setFromMatrixPosition(k.matrixWorld);Y.setFromMatrixPosition(k.target.matrixWorld);B.direction.sub(Y);B.direction.transformDirection(x);B.coneCos=Math.cos(k.angle);B.penumbraCos=Math.cos(k.angle*(1-k.penumbra));B.decay=0===k.distance?0:k.decay;if(B.shadow=k.castShadow)B.shadowBias=k.shadow.bias,B.shadowRadius=k.shadow.radius,B.shadowMapSize=k.shadow.mapSize;S.spotShadowMap[A]=k.shadow.map;S.spotShadowMatrix[A]=k.shadow.matrix;
-S.spot[A++]=B}else if(k instanceof THREE.PointLight){B=Fa.get(k);B.position.setFromMatrixPosition(k.matrixWorld);B.position.applyMatrix4(x);B.color.copy(k.color).multiplyScalar(k.intensity);B.distance=k.distance;B.decay=0===k.distance?0:k.decay;if(B.shadow=k.castShadow)B.shadowBias=k.shadow.bias,B.shadowRadius=k.shadow.radius,B.shadowMapSize=k.shadow.mapSize;S.pointShadowMap[C]=k.shadow.map;void 0===S.pointShadowMatrix[C]&&(S.pointShadowMatrix[C]=new THREE.Matrix4);Y.setFromMatrixPosition(k.matrixWorld).negate();
-S.pointShadowMatrix[C].identity().setPosition(Y);S.point[C++]=B}else k instanceof THREE.HemisphereLight&&(B=Fa.get(k),B.direction.setFromMatrixPosition(k.matrixWorld),B.direction.transformDirection(x),B.direction.normalize(),B.skyColor.copy(k.color).multiplyScalar(t),B.groundColor.copy(k.groundColor).multiplyScalar(t),S.hemi[H++]=B);S.ambient[0]=m;S.ambient[1]=l;S.ambient[2]=q;S.directional.length=D;S.spot.length=A;S.point.length=C;S.hemi.length=H;S.hash=D+","+C+","+A+","+H+","+S.shadows.length;ya&&
-(ta=!1,z());ja.calls=0;ja.vertices=0;ja.faces=0;ja.points=0;void 0===c&&(c=null);this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);a.overrideMaterial?(d=a.overrideMaterial,v(X,b,e,d),v(ha,b,e,d)):(L.setBlending(THREE.NoBlending),v(X,b,e),v(ha,b,e));Ua.render(a,b);Va.render(a,b,na);c&&(a=c.texture,a.generateMipmaps&&F(c)&&a.minFilter!==THREE.NearestFilter&&a.minFilter!==THREE.LinearFilter&&(a=c instanceof THREE.WebGLRenderTargetCube?
-r.TEXTURE_CUBE_MAP:r.TEXTURE_2D,c=U.get(c.texture).__webglTexture,L.bindTexture(a,c),r.generateMipmap(a),L.bindTexture(a,null)));L.setDepthTest(!0);L.setDepthWrite(!0);L.setColorWrite(!0)}};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?L.disable(r.CULL_FACE):(b===THREE.FrontFaceDirectionCW?r.frontFace(r.CW):r.frontFace(r.CCW),a===THREE.CullFaceBack?r.cullFace(r.BACK):a===THREE.CullFaceFront?r.cullFace(r.FRONT):r.cullFace(r.FRONT_AND_BACK),L.enable(r.CULL_FACE))};this.setTexture=function(a,
-b){var c=U.get(a);if(0<a.version&&c.__version!==a.version){var d=a.image;if(void 0===d)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",a);else if(!1===d.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",a);else{void 0===c.__webglInit&&(c.__webglInit=!0,a.addEventListener("dispose",f),c.__webglTexture=r.createTexture(),la.textures++);L.activeTexture(r.TEXTURE0+b);L.bindTexture(r.TEXTURE_2D,c.__webglTexture);r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,
-a.flipY);r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);r.pixelStorei(r.UNPACK_ALIGNMENT,a.unpackAlignment);var e=E(a.image,da.maxTextureSize);if((a.wrapS!==THREE.ClampToEdgeWrapping||a.wrapT!==THREE.ClampToEdgeWrapping||a.minFilter!==THREE.NearestFilter&&a.minFilter!==THREE.LinearFilter)&&!1===F(e))if(d=e,d instanceof HTMLImageElement||d instanceof HTMLCanvasElement){var g=document.createElement("canvas");g.width=THREE.Math.nearestPowerOfTwo(d.width);g.height=THREE.Math.nearestPowerOfTwo(d.height);
-g.getContext("2d").drawImage(d,0,0,g.width,g.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+d.width+"x"+d.height+"). Resized to "+g.width+"x"+g.height,d);e=g}else e=d;var d=F(e),g=I(a.format),h=I(a.type);A(r.TEXTURE_2D,a,d);var k=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<k.length&&d){for(var m=0,l=k.length;m<l;m++)e=k[m],L.texImage2D(r.TEXTURE_2D,m,g,e.width,e.height,0,g,h,e.data);a.generateMipmaps=!1}else L.texImage2D(r.TEXTURE_2D,0,g,e.width,e.height,0,g,h,e.data);
-else if(a instanceof THREE.CompressedTexture)for(m=0,l=k.length;m<l;m++)e=k[m],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<L.getCompressedTextureFormats().indexOf(g)?L.compressedTexImage2D(r.TEXTURE_2D,m,g,e.width,e.height,0,e.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):L.texImage2D(r.TEXTURE_2D,m,g,e.width,e.height,0,g,h,e.data);else if(0<k.length&&d){m=0;for(l=k.length;m<l;m++)e=k[m],L.texImage2D(r.TEXTURE_2D,
-m,g,g,h,e);a.generateMipmaps=!1}else L.texImage2D(r.TEXTURE_2D,0,g,g,h,e);a.generateMipmaps&&d&&r.generateMipmap(r.TEXTURE_2D);c.__version=a.version;if(a.onUpdate)a.onUpdate(a)}}else L.activeTexture(r.TEXTURE0+b),L.bindTexture(r.TEXTURE_2D,c.__webglTexture)};this.getCurrentRenderTarget=function(){return Ba};this.setRenderTarget=function(a){if((Ba=a)&&void 0===U.get(a).__webglFramebuffer){var b=U.get(a),c=U.get(a.texture);a.addEventListener("dispose",g);c.__webglTexture=r.createTexture();la.textures++;
-var d=a instanceof THREE.WebGLRenderTargetCube,e=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height);if(d){b.__webglFramebuffer=[];for(var f=0;6>f;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){L.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);A(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)J(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);
-L.bindTexture(r.TEXTURE_CUBE_MAP,null)}else L.bindTexture(r.TEXTURE_2D,c.__webglTexture),A(r.TEXTURE_2D,a.texture,e),J(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),L.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=U.get(a);if(a instanceof THREE.WebGLRenderTargetCube)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),O(b.__webglDepthbuffer[c],
-a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),O(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=U.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,va.copy(a.scissor),Ka=a.scissorTest,na.copy(a.viewport)):(c=null,va.copy(Ga).multiplyScalar(aa),Ka=Ma,na.copy(oa).multiplyScalar(aa));Ca!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),Ca=c);L.scissor(va);L.setScissorTest(Ka);
-L.viewport(na);b&&(b=U.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");else{var g=U.get(a).__webglFramebuffer;if(g){var h=!1;g!==Ca&&(r.bindFramebuffer(r.FRAMEBUFFER,g),h=!0);try{var k=a.texture;
-k.format!==THREE.RGBAFormat&&I(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||I(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?
-r.readPixels(b,c,d,e,I(k.format),I(k.type),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,Ca)}}}}};
+if(a===THREE.LuminanceAlphaFormat)return r.LUMINANCE_ALPHA;if(a===THREE.DepthFormat)return r.DEPTH_COMPONENT;if(a===THREE.AddEquation)return r.FUNC_ADD;if(a===THREE.SubtractEquation)return r.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return r.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return r.ZERO;if(a===THREE.OneFactor)return r.ONE;if(a===THREE.SrcColorFactor)return r.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return r.ONE_MINUS_SRC_COLOR;if(a===THREE.SrcAlphaFactor)return r.SRC_ALPHA;
+if(a===THREE.OneMinusSrcAlphaFactor)return r.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return r.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return r.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return r.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return r.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return r.SRC_ALPHA_SATURATE;b=V.get("WEBGL_compressed_texture_s3tc");if(null!==b){if(a===THREE.RGB_S3TC_DXT1_Format)return b.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return b.COMPRESSED_RGBA_S3TC_DXT1_EXT;
+if(a===THREE.RGBA_S3TC_DXT3_Format)return b.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return b.COMPRESSED_RGBA_S3TC_DXT5_EXT}b=V.get("WEBGL_compressed_texture_pvrtc");if(null!==b){if(a===THREE.RGB_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(a===THREE.RGB_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(a===THREE.RGBA_PVRTC_4BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(a===THREE.RGBA_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}b=
+V.get("WEBGL_compressed_texture_etc1");if(null!==b&&a===THREE.RGB_ETC1_Format)return b.COMPRESSED_RGB_ETC1_WEBGL;b=V.get("EXT_blend_minmax");if(null!==b){if(a===THREE.MinEquation)return b.MIN_EXT;if(a===THREE.MaxEquation)return b.MAX_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);a=a||{};var H=void 0!==a.canvas?a.canvas:document.createElement("canvas"),P=void 0!==a.context?a.context:null,R=void 0!==a.alpha?a.alpha:!1,Q=void 0!==a.depth?a.depth:!0,N=void 0!==a.stencil?a.stencil:!0,
+G=void 0!==a.antialias?a.antialias:!1,Z=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,U=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,$=[],X=[],ia=-1,ha=[],ma=-1,ea=new Float32Array(8),Ia=[],Ja=[];this.domElement=H;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.physicallyCorrectLights=this.gammaOutput=this.gammaInput=!1;this.toneMapping=
+THREE.LinearToneMapping;this.toneMappingWhitePoint=this.toneMappingExposure=1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;var W=this,Ha=null,Ba=null,Ca=null,qa=-1,pa="",ga=null,va=new THREE.Vector4,Ka=null,na=new THREE.Vector4,xa=0,ba=new THREE.Color(0),ka=0,Da=H.width,Ea=H.height,aa=1,Ga=new THREE.Vector4(0,0,Da,Ea),Ma=!1,oa=new THREE.Vector4(0,0,Da,Ea),La=new THREE.Frustum,ya=!1,za=!1,ta=!1,ca=0,fa={type:"4fv",value:null,needsUpdate:!1},Aa=null,ua=0,Qa=new THREE.Matrix3,
+Pa=new THREE.Sphere,Ra=new THREE.Plane,wa=new THREE.Matrix4,Y=new THREE.Vector3,S={hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],shadows:[]},la={geometries:0,textures:0},ja={calls:0,vertices:0,faces:0,points:0};this.info={render:ja,memory:la,programs:null};var r;try{R={alpha:R,depth:Q,stencil:N,antialias:G,premultipliedAlpha:Z,preserveDrawingBuffer:U};r=
+P||H.getContext("webgl",R)||H.getContext("experimental-webgl",R);if(null===r){if(null!==H.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}void 0===r.getShaderPrecisionFormat&&(r.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}});H.addEventListener("webglcontextlost",e,!1)}catch(Sa){console.error("THREE.WebGLRenderer: "+Sa)}var Na="undefined"!==typeof WebGL2RenderingContext&&r instanceof WebGL2RenderingContext,
+V=new THREE.WebGLExtensions(r);V.get("WEBGL_depth_texture");V.get("OES_texture_float");V.get("OES_texture_float_linear");V.get("OES_texture_half_float");V.get("OES_texture_half_float_linear");V.get("OES_standard_derivatives");V.get("ANGLE_instanced_arrays");V.get("OES_element_index_uint")&&(THREE.BufferGeometry.MaxIndex=4294967296);var da=new THREE.WebGLCapabilities(r,V,a),K=new THREE.WebGLState(r,V,I),T=new THREE.WebGLProperties,sa=new THREE.WebGLObjects(r,T,this.info),ra=new THREE.WebGLPrograms(this,
+da),Fa=new THREE.WebGLLights;this.info.programs=ra.programs;var Ta=new THREE.WebGLBufferRenderer(r,V,ja),Ua=new THREE.WebGLIndexedBufferRenderer(r,V,ja);c();this.context=r;this.capabilities=da;this.extensions=V;this.properties=T;this.state=K;var Oa=new THREE.WebGLShadowMap(this,S,sa);this.shadowMap=Oa;var Va=new THREE.SpritePlugin(this,Ia),Wa=new THREE.LensFlarePlugin(this,Ja);this.getContext=function(){return r};this.getContextAttributes=function(){return r.getContextAttributes()};this.forceContextLoss=
+function(){V.get("WEBGL_lose_context").loseContext()};this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==a)return a;var b=V.get("EXT_texture_filter_anisotropic");return a=null!==b?r.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}();this.getPrecision=function(){return da.precision};this.getPixelRatio=function(){return aa};this.setPixelRatio=function(a){void 0!==a&&(aa=a,this.setSize(oa.z,oa.w,!1))};this.getSize=function(){return{width:Da,height:Ea}};this.setSize=function(a,b,c){Da=
+a;Ea=b;H.width=a*aa;H.height=b*aa;!1!==c&&(H.style.width=a+"px",H.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){K.viewport(oa.set(a,b,c,d))};this.setScissor=function(a,b,c,d){K.scissor(Ga.set(a,b,c,d))};this.setScissorTest=function(a){K.setScissorTest(Ma=a)};this.getClearColor=function(){return ba};this.setClearColor=function(a,c){ba.set(a);ka=void 0!==c?c:1;b(ba.r,ba.g,ba.b,ka)};this.getClearAlpha=function(){return ka};this.setClearAlpha=function(a){ka=a;b(ba.r,
+ba.g,ba.b,ka)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=r.COLOR_BUFFER_BIT;if(void 0===b||b)d|=r.DEPTH_BUFFER_BIT;if(void 0===c||c)d|=r.STENCIL_BUFFER_BIT;r.clear(d)};this.clearColor=function(){this.clear(!0,!1,!1)};this.clearDepth=function(){this.clear(!1,!0,!1)};this.clearStencil=function(){this.clear(!1,!1,!0)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.resetGLState=d;this.dispose=function(){H.removeEventListener("webglcontextlost",e,!1)};this.renderBufferImmediate=
+function(a,b,c){K.initAttributes();var d=T.get(a);a.hasPositions&&!d.position&&(d.position=r.createBuffer());a.hasNormals&&!d.normal&&(d.normal=r.createBuffer());a.hasUvs&&!d.uv&&(d.uv=r.createBuffer());a.hasColors&&!d.color&&(d.color=r.createBuffer());b=b.getAttributes();a.hasPositions&&(r.bindBuffer(r.ARRAY_BUFFER,d.position),r.bufferData(r.ARRAY_BUFFER,a.positionArray,r.DYNAMIC_DRAW),K.enableAttribute(b.position),r.vertexAttribPointer(b.position,3,r.FLOAT,!1,0,0));if(a.hasNormals){r.bindBuffer(r.ARRAY_BUFFER,
+d.normal);if("MeshPhongMaterial"!==c.type&&"MeshStandardMaterial"!==c.type&&"MeshPhysicalMaterial"!==c.type&&c.shading===THREE.FlatShading)for(var e=0,f=3*a.count;e<f;e+=9){var g=a.normalArray,h=(g[e+0]+g[e+3]+g[e+6])/3,k=(g[e+1]+g[e+4]+g[e+7])/3,m=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=m;g[e+3]=h;g[e+4]=k;g[e+5]=m;g[e+6]=h;g[e+7]=k;g[e+8]=m}r.bufferData(r.ARRAY_BUFFER,a.normalArray,r.DYNAMIC_DRAW);K.enableAttribute(b.normal);r.vertexAttribPointer(b.normal,3,r.FLOAT,!1,0,0)}a.hasUvs&&c.map&&
+(r.bindBuffer(r.ARRAY_BUFFER,d.uv),r.bufferData(r.ARRAY_BUFFER,a.uvArray,r.DYNAMIC_DRAW),K.enableAttribute(b.uv),r.vertexAttribPointer(b.uv,2,r.FLOAT,!1,0,0));a.hasColors&&c.vertexColors!==THREE.NoColors&&(r.bindBuffer(r.ARRAY_BUFFER,d.color),r.bufferData(r.ARRAY_BUFFER,a.colorArray,r.DYNAMIC_DRAW),K.enableAttribute(b.color),r.vertexAttribPointer(b.color,3,r.FLOAT,!1,0,0));K.disableUnusedAttributes();r.drawArrays(r.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){t(d);
+var g=s(a,b,d,e),h=!1;a=c.id+"_"+g.id+"_"+d.wireframe;a!==pa&&(pa=a,h=!0);b=e.morphTargetInfluences;if(void 0!==b){a=[];for(var k=0,h=b.length;k<h;k++){var m=b[k];a.push([m,k])}a.sort(l);8<a.length&&(a.length=8);for(var n=c.morphAttributes,k=0,h=a.length;k<h;k++)m=a[k],ea[k]=m[0],0!==m[0]?(b=m[1],!0===d.morphTargets&&n.position&&c.addAttribute("morphTarget"+k,n.position[b]),!0===d.morphNormals&&n.normal&&c.addAttribute("morphNormal"+k,n.normal[b])):(!0===d.morphTargets&&c.removeAttribute("morphTarget"+
+k),!0===d.morphNormals&&c.removeAttribute("morphNormal"+k));a=g.getUniforms();null!==a.morphTargetInfluences&&r.uniform1fv(a.morphTargetInfluences,ea);h=!0}b=c.index;k=c.attributes.position;!0===d.wireframe&&(b=sa.getWireframeAttribute(c));null!==b?(a=Ua,a.setIndex(b)):a=Ta;if(h){a:{var h=void 0,p;if(c instanceof THREE.InstancedBufferGeometry&&(p=V.get("ANGLE_instanced_arrays"),null===p)){console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");
+break a}void 0===h&&(h=0);K.initAttributes();var m=c.attributes,g=g.getAttributes(),n=d.defaultAttributeValues,q;for(q in g){var u=g[q];if(0<=u){var v=m[q];if(void 0!==v){var w=v.itemSize,x=sa.getAttributeBuffer(v);if(v instanceof THREE.InterleavedBufferAttribute){var X=v.data,y=X.stride,v=v.offset;X instanceof THREE.InstancedInterleavedBuffer?(K.enableAttributeAndDivisor(u,X.meshPerAttribute,p),void 0===c.maxInstancedCount&&(c.maxInstancedCount=X.meshPerAttribute*X.count)):K.enableAttribute(u);r.bindBuffer(r.ARRAY_BUFFER,
+x);r.vertexAttribPointer(u,w,r.FLOAT,!1,y*X.array.BYTES_PER_ELEMENT,(h*y+v)*X.array.BYTES_PER_ELEMENT)}else v instanceof THREE.InstancedBufferAttribute?(K.enableAttributeAndDivisor(u,v.meshPerAttribute,p),void 0===c.maxInstancedCount&&(c.maxInstancedCount=v.meshPerAttribute*v.count)):K.enableAttribute(u),X=r.FLOAT,y=!1,v=v.array,v instanceof Uint8Array&&(X=r.UNSIGNED_BYTE,y=!0),r.bindBuffer(r.ARRAY_BUFFER,x),r.vertexAttribPointer(u,w,X,y,0,h*w*v.BYTES_PER_ELEMENT)}else if(void 0!==n&&(w=n[q],void 0!==
+w))switch(w.length){case 2:r.vertexAttrib2fv(u,w);break;case 3:r.vertexAttrib3fv(u,w);break;case 4:r.vertexAttrib4fv(u,w);break;default:r.vertexAttrib1fv(u,w)}}}K.disableUnusedAttributes()}null!==b&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,sa.getAttributeBuffer(b))}p=Infinity;null!==b?p=b.count:void 0!==k&&(p=k.count);q=c.drawRange.start;b=c.drawRange.count;k=null!==f?f.start:0;h=null!==f?f.count:Infinity;f=Math.max(0,q,k);p=Math.min(0+p,q+b,k+h)-1;p=Math.max(0,p-f+1);if(e instanceof THREE.Mesh)if(!0===
+d.wireframe)K.setLineWidth(d.wireframeLinewidth*(null===Ba?aa:1)),a.setMode(r.LINES);else switch(e.drawMode){case THREE.TrianglesDrawMode:a.setMode(r.TRIANGLES);break;case THREE.TriangleStripDrawMode:a.setMode(r.TRIANGLE_STRIP);break;case THREE.TriangleFanDrawMode:a.setMode(r.TRIANGLE_FAN)}else e instanceof THREE.Line?(d=d.linewidth,void 0===d&&(d=1),K.setLineWidth(d*(null===Ba?aa:1)),e instanceof THREE.LineSegments?a.setMode(r.LINES):a.setMode(r.LINE_STRIP)):e instanceof THREE.Points&&a.setMode(r.POINTS);
+c instanceof THREE.InstancedBufferGeometry?0<c.maxInstancedCount&&a.renderInstances(c,f,p):a.render(f,p)};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e=a.fog;pa="";qa=-1;ga=null;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);wa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);La.setFromMatrix(wa);
+$.length=0;ma=ia=-1;Ia.length=0;Ja.length=0;var f=this.clippingPlanes;ya=0!==W.clippingPlanes.length||W.localClippingEnabled||0!==ua||za;za=W.localClippingEnabled;Aa=y(f,b,0);ua=null!==f?f.length:0;u(a,b);X.length=ia+1;ha.length=ma+1;!0===W.sortObjects&&(X.sort(n),ha.sort(p));ya&&(ta=!0,y(null));for(var f=$,g=0,h=0,k=f.length;h<k;h++){var m=f[h];m.castShadow&&(S.shadows[g++]=m)}S.shadows.length=g;Oa.render(a,b);for(var f=$,l=m=0,q=0,s,t,w,x=b.matrixWorldInverse,D=0,C=0,A=0,H=0,g=0,h=f.length;g<h;g++)if(k=
+f[g],s=k.color,t=k.intensity,w=k.distance,k instanceof THREE.AmbientLight)m+=s.r*t,l+=s.g*t,q+=s.b*t;else if(k instanceof THREE.DirectionalLight){var B=Fa.get(k);B.color.copy(k.color).multiplyScalar(k.intensity);B.direction.setFromMatrixPosition(k.matrixWorld);Y.setFromMatrixPosition(k.target.matrixWorld);B.direction.sub(Y);B.direction.transformDirection(x);if(B.shadow=k.castShadow)B.shadowBias=k.shadow.bias,B.shadowRadius=k.shadow.radius,B.shadowMapSize=k.shadow.mapSize;S.directionalShadowMap[D]=
+k.shadow.map;S.directionalShadowMatrix[D]=k.shadow.matrix;S.directional[D++]=B}else if(k instanceof THREE.SpotLight){B=Fa.get(k);B.position.setFromMatrixPosition(k.matrixWorld);B.position.applyMatrix4(x);B.color.copy(s).multiplyScalar(t);B.distance=w;B.direction.setFromMatrixPosition(k.matrixWorld);Y.setFromMatrixPosition(k.target.matrixWorld);B.direction.sub(Y);B.direction.transformDirection(x);B.coneCos=Math.cos(k.angle);B.penumbraCos=Math.cos(k.angle*(1-k.penumbra));B.decay=0===k.distance?0:k.decay;
+if(B.shadow=k.castShadow)B.shadowBias=k.shadow.bias,B.shadowRadius=k.shadow.radius,B.shadowMapSize=k.shadow.mapSize;S.spotShadowMap[A]=k.shadow.map;S.spotShadowMatrix[A]=k.shadow.matrix;S.spot[A++]=B}else if(k instanceof THREE.PointLight){B=Fa.get(k);B.position.setFromMatrixPosition(k.matrixWorld);B.position.applyMatrix4(x);B.color.copy(k.color).multiplyScalar(k.intensity);B.distance=k.distance;B.decay=0===k.distance?0:k.decay;if(B.shadow=k.castShadow)B.shadowBias=k.shadow.bias,B.shadowRadius=k.shadow.radius,
+B.shadowMapSize=k.shadow.mapSize;S.pointShadowMap[C]=k.shadow.map;void 0===S.pointShadowMatrix[C]&&(S.pointShadowMatrix[C]=new THREE.Matrix4);Y.setFromMatrixPosition(k.matrixWorld).negate();S.pointShadowMatrix[C].identity().setPosition(Y);S.point[C++]=B}else k instanceof THREE.HemisphereLight&&(B=Fa.get(k),B.direction.setFromMatrixPosition(k.matrixWorld),B.direction.transformDirection(x),B.direction.normalize(),B.skyColor.copy(k.color).multiplyScalar(t),B.groundColor.copy(k.groundColor).multiplyScalar(t),
+S.hemi[H++]=B);S.ambient[0]=m;S.ambient[1]=l;S.ambient[2]=q;S.directional.length=D;S.spot.length=A;S.point.length=C;S.hemi.length=H;S.hash=D+","+C+","+A+","+H+","+S.shadows.length;ya&&(ta=!1,z());ja.calls=0;ja.vertices=0;ja.faces=0;ja.points=0;void 0===c&&(c=null);this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);a.overrideMaterial?(d=a.overrideMaterial,v(X,b,e,d),v(ha,b,e,d)):(K.setBlending(THREE.NoBlending),v(X,b,e),v(ha,b,e));
+Va.render(a,b);Wa.render(a,b,na);c&&(a=c.texture,a.generateMipmaps&&F(c)&&a.minFilter!==THREE.NearestFilter&&a.minFilter!==THREE.LinearFilter&&(a=c instanceof THREE.WebGLRenderTargetCube?r.TEXTURE_CUBE_MAP:r.TEXTURE_2D,c=T.get(c.texture).__webglTexture,K.bindTexture(a,c),r.generateMipmap(a),K.bindTexture(a,null)));K.setDepthTest(!0);K.setDepthWrite(!0);K.setColorWrite(!0)}};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?K.disable(r.CULL_FACE):(b===THREE.FrontFaceDirectionCW?r.frontFace(r.CW):
+r.frontFace(r.CCW),a===THREE.CullFaceBack?r.cullFace(r.BACK):a===THREE.CullFaceFront?r.cullFace(r.FRONT):r.cullFace(r.FRONT_AND_BACK),K.enable(r.CULL_FACE))};this.setTexture=function(a,b){var c=T.get(a);if(0<a.version&&c.__version!==a.version){var d=a.image;if(void 0===d)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",a);else if(!1===d.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",a);else{void 0===c.__webglInit&&
+(c.__webglInit=!0,a.addEventListener("dispose",f),c.__webglTexture=r.createTexture(),la.textures++);K.activeTexture(r.TEXTURE0+b);K.bindTexture(r.TEXTURE_2D,c.__webglTexture);r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,a.flipY);r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);r.pixelStorei(r.UNPACK_ALIGNMENT,a.unpackAlignment);var e=E(a.image,da.maxTextureSize);if((a.wrapS!==THREE.ClampToEdgeWrapping||a.wrapT!==THREE.ClampToEdgeWrapping||a.minFilter!==THREE.NearestFilter&&a.minFilter!==
+THREE.LinearFilter)&&!1===F(e))if(d=e,d instanceof HTMLImageElement||d instanceof HTMLCanvasElement){var g=document.createElement("canvas");g.width=THREE.Math.nearestPowerOfTwo(d.width);g.height=THREE.Math.nearestPowerOfTwo(d.height);g.getContext("2d").drawImage(d,0,0,g.width,g.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+d.width+"x"+d.height+"). Resized to "+g.width+"x"+g.height,d);e=g}else e=d;var d=F(e),g=I(a.format),h=I(a.type);A(r.TEXTURE_2D,a,d);var k=a.mipmaps;if(a instanceof
+THREE.DepthTexture){k=r.DEPTH_COMPONENT;if(a.type===THREE.FloatType){if(!Na)throw Error("Float Depth Texture only supported in WebGL2.0");k=r.DEPTH_COMPONENT32F}else Na&&(k=r.DEPTH_COMPONENT16);K.texImage2D(r.TEXTURE_2D,0,k,e.width,e.height,0,g,h,null)}else if(a instanceof THREE.DataTexture)if(0<k.length&&d){for(var m=0,l=k.length;m<l;m++)e=k[m],K.texImage2D(r.TEXTURE_2D,m,g,e.width,e.height,0,g,h,e.data);a.generateMipmaps=!1}else K.texImage2D(r.TEXTURE_2D,0,g,e.width,e.height,0,g,h,e.data);else if(a instanceof
+THREE.CompressedTexture)for(m=0,l=k.length;m<l;m++)e=k[m],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<K.getCompressedTextureFormats().indexOf(g)?K.compressedTexImage2D(r.TEXTURE_2D,m,g,e.width,e.height,0,e.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):K.texImage2D(r.TEXTURE_2D,m,g,e.width,e.height,0,g,h,e.data);else if(0<k.length&&d){m=0;for(l=k.length;m<l;m++)e=k[m],K.texImage2D(r.TEXTURE_2D,m,g,g,h,e);a.generateMipmaps=
+!1}else K.texImage2D(r.TEXTURE_2D,0,g,g,h,e);a.generateMipmaps&&d&&r.generateMipmap(r.TEXTURE_2D);c.__version=a.version;if(a.onUpdate)a.onUpdate(a)}}else K.activeTexture(r.TEXTURE0+b),K.bindTexture(r.TEXTURE_2D,c.__webglTexture)};this.getCurrentRenderTarget=function(){return Ba};this.setRenderTarget=function(a){if((Ba=a)&&void 0===T.get(a).__webglFramebuffer){var b=T.get(a),c=T.get(a.texture);a.addEventListener("dispose",g);c.__webglTexture=r.createTexture();la.textures++;var d=a instanceof THREE.WebGLRenderTargetCube,
+e=THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height);if(d){b.__webglFramebuffer=[];for(var f=0;6>f;f++)b.__webglFramebuffer[f]=r.createFramebuffer()}else b.__webglFramebuffer=r.createFramebuffer();if(d){K.bindTexture(r.TEXTURE_CUBE_MAP,c.__webglTexture);A(r.TEXTURE_CUBE_MAP,a.texture,e);for(f=0;6>f;f++)J(b.__webglFramebuffer[f],a,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+f);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP);K.bindTexture(r.TEXTURE_CUBE_MAP,
+null)}else K.bindTexture(r.TEXTURE_2D,c.__webglTexture),A(r.TEXTURE_2D,a.texture,e),J(b.__webglFramebuffer,a,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D),K.bindTexture(r.TEXTURE_2D,null);if(a.depthBuffer){b=T.get(a);c=a instanceof THREE.WebGLRenderTargetCube;if(a.depthTexture){if(c)throw Error("target.depthTexture not supported in Cube render targets");if(a instanceof THREE.WebGLRenderTargetCube)throw Error("Depth Texture with cube render targets is not supported!");
+r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer);if(!(a.depthTexture instanceof THREE.DepthTexture))throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");T.get(a.depthTexture).__webglTexture&&a.depthTexture.image.width===a.width&&a.depthTexture.image.height===a.height||(a.depthTexture.image.width=a.width,a.depthTexture.image.height=a.height,a.depthTexture.needsUpdate=!0);W.setTexture(a.depthTexture,0);b=T.get(a.depthTexture).__webglTexture;r.framebufferTexture2D(r.FRAMEBUFFER,
+r.DEPTH_ATTACHMENT,r.TEXTURE_2D,b,0)}else if(c)for(b.__webglDepthbuffer=[],c=0;6>c;c++)r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer[c]),b.__webglDepthbuffer[c]=r.createRenderbuffer(),O(b.__webglDepthbuffer[c],a);else r.bindFramebuffer(r.FRAMEBUFFER,b.__webglFramebuffer),b.__webglDepthbuffer=r.createRenderbuffer(),O(b.__webglDepthbuffer,a);r.bindFramebuffer(r.FRAMEBUFFER,null)}}b=a instanceof THREE.WebGLRenderTargetCube;a?(c=T.get(a),c=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,
+va.copy(a.scissor),Ka=a.scissorTest,na.copy(a.viewport)):(c=null,va.copy(Ga).multiplyScalar(aa),Ka=Ma,na.copy(oa).multiplyScalar(aa));Ca!==c&&(r.bindFramebuffer(r.FRAMEBUFFER,c),Ca=c);K.scissor(va);K.setScissorTest(Ka);K.viewport(na);b&&(b=T.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,b.__webglTexture,a.activeMipMapLevel))};this.readRenderTargetPixels=function(a,b,c,d,e,f){if(!1===a instanceof THREE.WebGLRenderTarget)console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");
+else{var g=T.get(a).__webglFramebuffer;if(g){var h=!1;g!==Ca&&(r.bindFramebuffer(r.FRAMEBUFFER,g),h=!0);try{var k=a.texture;k.format!==THREE.RGBAFormat&&I(k.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):k.type===THREE.UnsignedByteType||I(k.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||k.type===THREE.FloatType&&V.get("WEBGL_color_buffer_float")||k.type===
+THREE.HalfFloatType&&V.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,c,d,e,I(k.format),I(k.type),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{h&&r.bindFramebuffer(r.FRAMEBUFFER,Ca)}}}}};
 THREE.WebGLRenderTarget=function(a,b,c){this.uuid=THREE.Math.generateUUID();this.width=a;this.height=b;this.scissor=new THREE.Vector4(0,0,a,b);this.scissorTest=!1;this.viewport=new THREE.Vector4(0,0,a,b);c=c||{};void 0===c.minFilter&&(c.minFilter=THREE.LinearFilter);this.texture=new THREE.Texture(void 0,void 0,c.wrapS,c.wrapT,c.magFilter,c.minFilter,c.format,c.type,c.anisotropy,c.encoding);this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:
-!0};THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}};
-THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;
+!0;this.depthTexture=null};
+THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},
+dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeMipMapLevel=this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;
 THREE.WebGLBufferRenderer=function(a,b,c){var d;this.setMode=function(a){d=a};this.render=function(b,f){a.drawArrays(d,b,f);c.calls++;c.vertices+=f;d===a.TRIANGLES&&(c.faces+=f/3)};this.renderInstances=function(e){var f=b.get("ANGLE_instanced_arrays");if(null===f)console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");else{var g=e.attributes.position,h=0,h=g instanceof THREE.InterleavedBufferAttribute?g.data.count:
 g.count;f.drawArraysInstancedANGLE(d,0,h,e.maxInstancedCount);c.calls++;c.vertices+=h*e.maxInstancedCount;d===a.TRIANGLES&&(c.faces+=e.maxInstancedCount*h/3)}}};
 THREE.WebGLIndexedBufferRenderer=function(a,b,c){var d,e,f;this.setMode=function(a){d=a};this.setIndex=function(c){c.array instanceof Uint32Array&&b.get("OES_element_index_uint")?(e=a.UNSIGNED_INT,f=4):(e=a.UNSIGNED_SHORT,f=2)};this.render=function(b,h){a.drawElements(d,h,e,b*f);c.calls++;c.vertices+=h;d===a.TRIANGLES&&(c.faces+=h/3)};this.renderInstances=function(g,h,k){var l=b.get("ANGLE_instanced_arrays");null===l?console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays."):
 (l.drawElementsInstancedANGLE(d,k,e,h*f,g.maxInstancedCount),c.calls++,c.vertices+=k*g.maxInstancedCount,d===a.TRIANGLES&&(c.faces+=g.maxInstancedCount*k/3))}};
-THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");
-break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case "WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};
+THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c])return b[c];var d;switch(c){case "WEBGL_depth_texture":a.getExtension("WEBGL_depth_texture")||a.getExtension("MOZ_WEBGL_depth_texture")||a.getExtension("WEBKIT_WEBGL_depth_texture");case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=
+a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;case "WEBGL_compressed_texture_etc1":d=a.getExtension("WEBGL_compressed_texture_etc1");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");
+return b[c]=d}};
 THREE.WebGLCapabilities=function(a,b,c){function d(b){if("highp"===b){if(0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.HIGH_FLOAT).precision&&0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.HIGH_FLOAT).precision)return"highp";b="mediump"}return"mediump"===b&&0<a.getShaderPrecisionFormat(a.VERTEX_SHADER,a.MEDIUM_FLOAT).precision&&0<a.getShaderPrecisionFormat(a.FRAGMENT_SHADER,a.MEDIUM_FLOAT).precision?"mediump":"lowp"}this.getMaxPrecision=d;this.precision=void 0!==c.precision?c.precision:"highp";
 this.logarithmicDepthBuffer=void 0!==c.logarithmicDepthBuffer?c.logarithmicDepthBuffer:!1;this.maxTextures=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS);this.maxVertexTextures=a.getParameter(a.MAX_VERTEX_TEXTURE_IMAGE_UNITS);this.maxTextureSize=a.getParameter(a.MAX_TEXTURE_SIZE);this.maxCubemapSize=a.getParameter(a.MAX_CUBE_MAP_TEXTURE_SIZE);this.maxAttributes=a.getParameter(a.MAX_VERTEX_ATTRIBS);this.maxVertexUniforms=a.getParameter(a.MAX_VERTEX_UNIFORM_VECTORS);this.maxVaryings=a.getParameter(a.MAX_VARYING_VECTORS);
 this.maxFragmentUniforms=a.getParameter(a.MAX_FRAGMENT_UNIFORM_VECTORS);this.vertexTextures=0<this.maxVertexTextures;this.floatFragmentTextures=!!b.get("OES_texture_float");this.floatVertexTextures=this.vertexTextures&&this.floatFragmentTextures;c=d(this.precision);c!==this.precision&&(console.warn("THREE.WebGLRenderer:",this.precision,"not supported, using",c,"instead."),this.precision=c);this.logarithmicDepthBuffer&&(this.logarithmicDepthBuffer=!!b.get("EXT_frag_depth"))};
@@ -722,7 +727,7 @@ s.alphaTest:"","#define GAMMA_FACTOR "+B,s.useFog&&s.fog?"#define USE_FOG":"",s.
 s.envMapEncoding||s.emissiveMapEncoding?THREE.ShaderChunk.encodings_pars_fragment:"",s.mapEncoding?b("mapTexelToLinear",s.mapEncoding):"",s.envMapEncoding?b("envMapTexelToLinear",s.envMapEncoding):"",s.emissiveMapEncoding?b("emissiveMapTexelToLinear",s.emissiveMapEncoding):"",s.outputEncoding?c("linearToOutputTexel",s.outputEncoding):"",s.depthPacking?"#define DEPTH_PACKING "+t.depthPacking:"",s.depthFormat?"#define DEPTH_FORMAT "+t.depthFormat:"","\n"].filter(g).join("\n"));C=k(C,s);C=h(C,s);y=k(y,
 s);y=h(y,s);!1===t instanceof THREE.ShaderMaterial&&(C=l(C),y=l(y));y=a+y;C=THREE.WebGLShader(w,w.VERTEX_SHADER,x+C);y=THREE.WebGLShader(w,w.FRAGMENT_SHADER,y);w.attachShader(J,C);w.attachShader(J,y);void 0!==t.index0AttributeName?w.bindAttribLocation(J,0,t.index0AttributeName):!0===s.morphTargets&&w.bindAttribLocation(J,0,"position");w.linkProgram(J);s=w.getProgramInfoLog(J);z=w.getShaderInfoLog(C);A=w.getShaderInfoLog(y);F=E=!0;if(!1===w.getProgramParameter(J,w.LINK_STATUS))E=!1,console.error("THREE.WebGLProgram: shader error: ",
 w.getError(),"gl.VALIDATE_STATUS",w.getProgramParameter(J,w.VALIDATE_STATUS),"gl.getProgramInfoLog",s,z,A);else if(""!==s)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",s);else if(""===z||""===A)F=!1;F&&(this.diagnostics={runnable:E,material:t,programLog:s,vertexShader:{log:z,prefix:x},fragmentShader:{log:A,prefix:a}});w.deleteShader(C);w.deleteShader(y);var O;this.getUniforms=function(){if(void 0===O){for(var a={},b=w.getProgramParameter(J,w.ACTIVE_UNIFORMS),c=0;c<b;c++){var d=w.getActiveUniform(J,
-c).name,e=w.getUniformLocation(J,d),f=p.exec(d);if(f){var d=f[1],f=f[2],g=a[d];g||(g=a[d]={});g[f]=e}else if(f=m.exec(d)){var g=f[1],d=f[2],f=f[3],h=a[g];h||(h=a[g]=[]);(g=h[d])||(g=h[d]={});g[f]=e}else(f=q.exec(d))?(g=f[1],a[g]=e):a[d]=e}O=a}return O};var K;this.getAttributes=function(){if(void 0===K){for(var a={},b=w.getProgramParameter(J,w.ACTIVE_ATTRIBUTES),c=0;c<b;c++){var d=w.getActiveAttrib(J,c).name;a[d]=w.getAttribLocation(J,d)}K=a}return K};this.destroy=function(){w.deleteProgram(J);this.program=
+c).name,e=w.getUniformLocation(J,d),f=p.exec(d);if(f){var d=f[1],f=f[2],g=a[d];g||(g=a[d]={});g[f]=e}else if(f=m.exec(d)){var g=f[1],d=f[2],f=f[3],h=a[g];h||(h=a[g]=[]);(g=h[d])||(g=h[d]={});g[f]=e}else(f=q.exec(d))?(g=f[1],a[g]=e):a[d]=e}O=a}return O};var L;this.getAttributes=function(){if(void 0===L){for(var a={},b=w.getProgramParameter(J,w.ACTIVE_ATTRIBUTES),c=0;c<b;c++){var d=w.getActiveAttrib(J,c).name;a[d]=w.getAttribLocation(J,d)}L=a}return L};this.destroy=function(){w.deleteProgram(J);this.program=
 void 0};Object.defineProperties(this,{uniforms:{get:function(){console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms().");return this.getUniforms()}},attributes:{get:function(){console.warn("THREE.WebGLProgram: .attributes is now .getAttributes().");return this.getAttributes()}}});this.id=n++;this.code=v;this.usedTimes=1;this.program=J;this.vertexShader=C;this.fragmentShader=y;return this}}();
 THREE.WebGLPrograms=function(a,b){function c(a,b){var c;a?a instanceof THREE.Texture?c=a.encoding:a instanceof THREE.WebGLRenderTarget&&(c=a.texture.encoding):c=THREE.LinearEncoding;c===THREE.LinearEncoding&&b&&(c=THREE.GammaEncoding);return c}var d=[],e={MeshDepthMaterial:"depth",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshStandardMaterial:"standard",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",
 PointsMaterial:"points"},f="precision supportsVertexTextures map mapEncoding envMap envMapMode envMapEncoding lightMap aoMap emissiveMap emissiveMapEncoding bumpMap normalMap displacementMap specularMap roughnessMap metalnessMap alphaMap combine vertexColors fog useFog fogExp flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes depthPacking depthFormat".split(" ");
@@ -741,9 +746,9 @@ a=a.children;for(var d=0,f=a.length;d<f;d++)e(a[d],b,c)}}var f=a.context,g=a.sta
 fragmentShader:x.fragmentShader,morphTargets:z,skinning:A,clipping:!0});v[y]=z}var F=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=THREE.PCFShadowMap;this.cullFace=THREE.CullFaceFront;this.render=function(b,u){if(!1!==F.enabled&&(!1!==F.autoUpdate||!1!==F.needsUpdate)&&0!==l.length){g.clearColor(1,1,1,1);g.disable(f.BLEND);g.enable(f.CULL_FACE);f.frontFace(f.CCW);f.cullFace(F.cullFace===THREE.CullFaceFront?f.FRONT:f.BACK);g.setDepthTest(!0);g.setScissorTest(!1);for(var t,v,
 x=0,y=l.length;x<y;x++){var z=l[x],C=z.shadow,A=C.camera;n.copy(C.mapSize);if(z instanceof THREE.PointLight){t=6;v=!0;var E=n.x,N=n.y;D[0].set(2*E,N,E,N);D[1].set(0,N,E,N);D[2].set(3*E,N,E,N);D[3].set(E,N,E,N);D[4].set(3*E,0,E,N);D[5].set(E,0,E,N);n.x*=4;n.y*=2}else t=1,v=!1;null===C.map&&(C.map=new THREE.WebGLRenderTarget(n.x,n.y,{minFilter:THREE.NearestFilter,magFilter:THREE.NearestFilter,format:THREE.RGBAFormat}),A.updateProjectionMatrix());C instanceof THREE.SpotLightShadow&&C.update(z);E=C.map;
 C=C.matrix;m.setFromMatrixPosition(z.matrixWorld);A.position.copy(m);a.setRenderTarget(E);a.clear();for(E=0;E<t;E++){v?(p.copy(A.position),p.add(s[E]),A.up.copy(w[E]),A.lookAt(p),g.viewport(D[E])):(p.setFromMatrixPosition(z.target.matrixWorld),A.lookAt(p));A.updateMatrixWorld();A.matrixWorldInverse.getInverse(A.matrixWorld);C.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);C.multiply(A.projectionMatrix);C.multiply(A.matrixWorldInverse);k.multiplyMatrices(A.projectionMatrix,A.matrixWorldInverse);h.setFromMatrix(k);
-q.length=0;e(b,u,A);for(var N=0,G=q.length;N<G;N++){var Z=q[N],T=c.update(Z),$=Z.material;if($ instanceof THREE.MultiMaterial)for(var X=T.groups,$=$.materials,ia=0,ha=X.length;ia<ha;ia++){var ma=X[ia],ea=$[ma.materialIndex];!0===ea.visible&&(ea=d(Z,ea,v,m),a.renderBufferDirect(A,null,T,ea,Z,ma))}else ea=d(Z,$,v,m),a.renderBufferDirect(A,null,T,ea,Z,null)}}}t=a.getClearColor();v=a.getClearAlpha();a.setClearColor(t,v);g.enable(f.BLEND);F.cullFace===THREE.CullFaceFront&&f.cullFace(f.BACK);F.needsUpdate=
+q.length=0;e(b,u,A);for(var N=0,G=q.length;N<G;N++){var Z=q[N],U=c.update(Z),$=Z.material;if($ instanceof THREE.MultiMaterial)for(var X=U.groups,$=$.materials,ia=0,ha=X.length;ia<ha;ia++){var ma=X[ia],ea=$[ma.materialIndex];!0===ea.visible&&(ea=d(Z,ea,v,m),a.renderBufferDirect(A,null,U,ea,Z,ma))}else ea=d(Z,$,v,m),a.renderBufferDirect(A,null,U,ea,Z,null)}}}t=a.getClearColor();v=a.getClearAlpha();a.setClearColor(t,v);g.enable(f.BLEND);F.cullFace===THREE.CullFaceFront&&f.cullFace(f.BACK);F.needsUpdate=
 !1}}};
-THREE.WebGLState=function(a,b,c){var d=this,e=new THREE.Vector4,f=a.getParameter(a.MAX_VERTEX_ATTRIBS),g=new Uint8Array(f),h=new Uint8Array(f),k=new Uint8Array(f),l={},n=null,p=null,m=null,q=null,u=null,v=null,t=null,s=null,w=!1,D=null,x=null,C=null,y=null,z=null,A=null,E=null,F=null,B=null,M=null,J=null,O=null,K=null,I=null,H=null,P=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),R=void 0,Q={},N=new THREE.Vector4,G=null,Z=null,T=new THREE.Vector4,$=new THREE.Vector4;this.init=function(){this.clearColor(0,0,
+THREE.WebGLState=function(a,b,c){var d=this,e=new THREE.Vector4,f=a.getParameter(a.MAX_VERTEX_ATTRIBS),g=new Uint8Array(f),h=new Uint8Array(f),k=new Uint8Array(f),l={},n=null,p=null,m=null,q=null,u=null,v=null,t=null,s=null,w=!1,D=null,x=null,C=null,y=null,z=null,A=null,E=null,F=null,B=null,M=null,J=null,O=null,L=null,I=null,H=null,P=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),R=void 0,Q={},N=new THREE.Vector4,G=null,Z=null,U=new THREE.Vector4,$=new THREE.Vector4;this.init=function(){this.clearColor(0,0,
 0,1);this.clearDepth(1);this.clearStencil(0);this.enable(a.DEPTH_TEST);a.depthFunc(a.LEQUAL);a.frontFace(a.CCW);a.cullFace(a.BACK);this.enable(a.CULL_FACE);this.enable(a.BLEND);a.blendEquation(a.FUNC_ADD);a.blendFunc(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA)};this.initAttributes=function(){for(var a=0,b=g.length;a<b;a++)g[a]=0};this.enableAttribute=function(c){g[c]=1;0===h[c]&&(a.enableVertexAttribArray(c),h[c]=1);0!==k[c]&&(b.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(c,0),k[c]=0)};this.enableAttributeAndDivisor=
 function(b,c,d){g[b]=1;0===h[b]&&(a.enableVertexAttribArray(b),h[b]=1);k[b]!==c&&(d.vertexAttribDivisorANGLE(b,c),k[b]=c)};this.disableUnusedAttributes=function(){for(var b=0,c=h.length;b<c;b++)h[b]!==g[b]&&(a.disableVertexAttribArray(b),h[b]=0)};this.enable=function(b){!0!==l[b]&&(a.enable(b),l[b]=!0)};this.disable=function(b){!1!==l[b]&&(a.disable(b),l[b]=!1)};this.getCompressedTextureFormats=function(){if(null===n&&(n=[],b.get("WEBGL_compressed_texture_pvrtc")||b.get("WEBGL_compressed_texture_s3tc")||
 b.get("WEBGL_compressed_texture_etc1")))for(var c=a.getParameter(a.COMPRESSED_TEXTURE_FORMATS),d=0;d<c.length;d++)n.push(c[d]);return n};this.setBlending=function(b,d,e,f,g,h,k,l){b===THREE.NoBlending?this.disable(a.BLEND):this.enable(a.BLEND);if(b!==p||l!==w)b===THREE.AdditiveBlending?l?(a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.ONE,a.ONE,a.ONE,a.ONE)):(a.blendEquation(a.FUNC_ADD),a.blendFunc(a.SRC_ALPHA,a.ONE)):b===THREE.SubtractiveBlending?l?(a.blendEquationSeparate(a.FUNC_ADD,
@@ -751,25 +756,25 @@ a.FUNC_ADD),a.blendFuncSeparate(a.ZERO,a.ZERO,a.ONE_MINUS_SRC_COLOR,a.ONE_MINUS_
 a.FUNC_ADD),a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)),p=b,w=l;if(b===THREE.CustomBlending){g=g||d;h=h||e;k=k||f;if(d!==m||g!==v)a.blendEquationSeparate(c(d),c(g)),m=d,v=g;if(e!==q||f!==u||h!==t||k!==s)a.blendFuncSeparate(c(e),c(f),c(h),c(k)),q=e,u=f,t=h,s=k}else s=t=v=u=q=m=null};this.setDepthFunc=function(b){if(D!==b){if(b)switch(b){case THREE.NeverDepth:a.depthFunc(a.NEVER);break;case THREE.AlwaysDepth:a.depthFunc(a.ALWAYS);break;case THREE.LessDepth:a.depthFunc(a.LESS);
 break;case THREE.LessEqualDepth:a.depthFunc(a.LEQUAL);break;case THREE.EqualDepth:a.depthFunc(a.EQUAL);break;case THREE.GreaterEqualDepth:a.depthFunc(a.GEQUAL);break;case THREE.GreaterDepth:a.depthFunc(a.GREATER);break;case THREE.NotEqualDepth:a.depthFunc(a.NOTEQUAL);break;default:a.depthFunc(a.LEQUAL)}else a.depthFunc(a.LEQUAL);D=b}};this.setDepthTest=function(b){b?this.enable(a.DEPTH_TEST):this.disable(a.DEPTH_TEST)};this.setDepthWrite=function(b){x!==b&&(a.depthMask(b),x=b)};this.setColorWrite=
 function(b){C!==b&&(a.colorMask(b,b,b,b),C=b)};this.setStencilFunc=function(b,c,d){if(z!==b||A!==c||E!==d)a.stencilFunc(b,c,d),z=b,A=c,E=d};this.setStencilOp=function(b,c,d){if(F!==b||B!==c||M!==d)a.stencilOp(b,c,d),F=b,B=c,M=d};this.setStencilTest=function(b){b?this.enable(a.STENCIL_TEST):this.disable(a.STENCIL_TEST)};this.setStencilWrite=function(b){y!==b&&(a.stencilMask(b),y=b)};this.setFlipSided=function(b){J!==b&&(b?a.frontFace(a.CW):a.frontFace(a.CCW),J=b)};this.setLineWidth=function(b){b!==
-O&&(a.lineWidth(b),O=b)};this.setPolygonOffset=function(b,c,d){b?this.enable(a.POLYGON_OFFSET_FILL):this.disable(a.POLYGON_OFFSET_FILL);!b||K===c&&I===d||(a.polygonOffset(c,d),K=c,I=d)};this.getScissorTest=function(){return H};this.setScissorTest=function(b){(H=b)?this.enable(a.SCISSOR_TEST):this.disable(a.SCISSOR_TEST)};this.activeTexture=function(b){void 0===b&&(b=a.TEXTURE0+P-1);R!==b&&(a.activeTexture(b),R=b)};this.bindTexture=function(b,c){void 0===R&&d.activeTexture();var e=Q[R];void 0===e&&
+O&&(a.lineWidth(b),O=b)};this.setPolygonOffset=function(b,c,d){b?this.enable(a.POLYGON_OFFSET_FILL):this.disable(a.POLYGON_OFFSET_FILL);!b||L===c&&I===d||(a.polygonOffset(c,d),L=c,I=d)};this.getScissorTest=function(){return H};this.setScissorTest=function(b){(H=b)?this.enable(a.SCISSOR_TEST):this.disable(a.SCISSOR_TEST)};this.activeTexture=function(b){void 0===b&&(b=a.TEXTURE0+P-1);R!==b&&(a.activeTexture(b),R=b)};this.bindTexture=function(b,c){void 0===R&&d.activeTexture();var e=Q[R];void 0===e&&
 (e={type:void 0,texture:void 0},Q[R]=e);if(e.type!==b||e.texture!==c)a.bindTexture(b,c),e.type=b,e.texture=c};this.compressedTexImage2D=function(){try{a.compressedTexImage2D.apply(a,arguments)}catch(b){console.error(b)}};this.texImage2D=function(){try{a.texImage2D.apply(a,arguments)}catch(b){console.error(b)}};this.clearColor=function(b,c,d,f){e.set(b,c,d,f);!1===N.equals(e)&&(a.clearColor(b,c,d,f),N.copy(e))};this.clearDepth=function(b){G!==b&&(a.clearDepth(b),G=b)};this.clearStencil=function(b){Z!==
-b&&(a.clearStencil(b),Z=b)};this.scissor=function(b){!1===T.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),T.copy(b))};this.viewport=function(b){!1===$.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),$.copy(b))};this.reset=function(){for(var b=0;b<h.length;b++)1===h[b]&&(a.disableVertexAttribArray(b),h[b]=0);l={};n=null;R=void 0;Q={};J=y=x=C=p=null}};
-THREE.LensFlarePlugin=function(a,b){var c,d,e,f,g,h,k,l,n,p,m=a.context,q=a.state,u,v,t,s,w,D;this.render=function(x,C,y){if(0!==b.length){x=new THREE.Vector3;var z=y.w/y.z,A=.5*y.z,E=.5*y.w,F=16/y.w,B=new THREE.Vector2(F*z,F),M=new THREE.Vector3(1,1,0),J=new THREE.Vector2(1,1),O=new THREE.Box2;O.min.set(0,0);O.max.set(y.z-16,y.w-16);if(void 0===s){var F=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),K=new Uint16Array([0,1,2,0,2,3]);u=m.createBuffer();v=m.createBuffer();m.bindBuffer(m.ARRAY_BUFFER,
-u);m.bufferData(m.ARRAY_BUFFER,F,m.STATIC_DRAW);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,v);m.bufferData(m.ELEMENT_ARRAY_BUFFER,K,m.STATIC_DRAW);w=m.createTexture();D=m.createTexture();q.bindTexture(m.TEXTURE_2D,w);m.texImage2D(m.TEXTURE_2D,0,m.RGB,16,16,0,m.RGB,m.UNSIGNED_BYTE,null);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,
+b&&(a.clearStencil(b),Z=b)};this.scissor=function(b){!1===U.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),U.copy(b))};this.viewport=function(b){!1===$.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),$.copy(b))};this.reset=function(){for(var b=0;b<h.length;b++)1===h[b]&&(a.disableVertexAttribArray(b),h[b]=0);l={};n=null;R=void 0;Q={};J=y=x=C=p=null}};
+THREE.LensFlarePlugin=function(a,b){var c,d,e,f,g,h,k,l,n,p,m=a.context,q=a.state,u,v,t,s,w,D;this.render=function(x,C,y){if(0!==b.length){x=new THREE.Vector3;var z=y.w/y.z,A=.5*y.z,E=.5*y.w,F=16/y.w,B=new THREE.Vector2(F*z,F),M=new THREE.Vector3(1,1,0),J=new THREE.Vector2(1,1),O=new THREE.Box2;O.min.set(0,0);O.max.set(y.z-16,y.w-16);if(void 0===s){var F=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),L=new Uint16Array([0,1,2,0,2,3]);u=m.createBuffer();v=m.createBuffer();m.bindBuffer(m.ARRAY_BUFFER,
+u);m.bufferData(m.ARRAY_BUFFER,F,m.STATIC_DRAW);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,v);m.bufferData(m.ELEMENT_ARRAY_BUFFER,L,m.STATIC_DRAW);w=m.createTexture();D=m.createTexture();q.bindTexture(m.TEXTURE_2D,w);m.texImage2D(m.TEXTURE_2D,0,m.RGB,16,16,0,m.RGB,m.UNSIGNED_BYTE,null);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,
 m.NEAREST);q.bindTexture(m.TEXTURE_2D,D);m.texImage2D(m.TEXTURE_2D,0,m.RGBA,16,16,0,m.RGBA,m.UNSIGNED_BYTE,null);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MAG_FILTER,m.NEAREST);m.texParameteri(m.TEXTURE_2D,m.TEXTURE_MIN_FILTER,m.NEAREST);var F=t={vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif ( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility =        visibility.r / 9.0;\nvVisibility *= 1.0 - visibility.g / 9.0;\nvVisibility *=       visibility.b / 9.0;\nvVisibility *= 1.0 - visibility.a / 9.0;\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",
-fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif ( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if ( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},K=m.createProgram(),I=m.createShader(m.FRAGMENT_SHADER),
-H=m.createShader(m.VERTEX_SHADER),P="precision "+a.getPrecision()+" float;\n";m.shaderSource(I,P+F.fragmentShader);m.shaderSource(H,P+F.vertexShader);m.compileShader(I);m.compileShader(H);m.attachShader(K,I);m.attachShader(K,H);m.linkProgram(K);s=K;n=m.getAttribLocation(s,"position");p=m.getAttribLocation(s,"uv");c=m.getUniformLocation(s,"renderType");d=m.getUniformLocation(s,"map");e=m.getUniformLocation(s,"occlusionMap");f=m.getUniformLocation(s,"opacity");g=m.getUniformLocation(s,"color");h=m.getUniformLocation(s,
-"scale");k=m.getUniformLocation(s,"rotation");l=m.getUniformLocation(s,"screenPosition")}m.useProgram(s);q.initAttributes();q.enableAttribute(n);q.enableAttribute(p);q.disableUnusedAttributes();m.uniform1i(e,0);m.uniform1i(d,1);m.bindBuffer(m.ARRAY_BUFFER,u);m.vertexAttribPointer(n,2,m.FLOAT,!1,16,0);m.vertexAttribPointer(p,2,m.FLOAT,!1,16,8);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,v);q.disable(m.CULL_FACE);q.setDepthWrite(!1);K=0;for(I=b.length;K<I;K++)if(F=16/y.w,B.set(F*z,F),H=b[K],x.set(H.matrixWorld.elements[12],
+fragmentShader:"uniform lowp int renderType;\nuniform sampler2D map;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif ( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if ( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},L=m.createProgram(),I=m.createShader(m.FRAGMENT_SHADER),
+H=m.createShader(m.VERTEX_SHADER),P="precision "+a.getPrecision()+" float;\n";m.shaderSource(I,P+F.fragmentShader);m.shaderSource(H,P+F.vertexShader);m.compileShader(I);m.compileShader(H);m.attachShader(L,I);m.attachShader(L,H);m.linkProgram(L);s=L;n=m.getAttribLocation(s,"position");p=m.getAttribLocation(s,"uv");c=m.getUniformLocation(s,"renderType");d=m.getUniformLocation(s,"map");e=m.getUniformLocation(s,"occlusionMap");f=m.getUniformLocation(s,"opacity");g=m.getUniformLocation(s,"color");h=m.getUniformLocation(s,
+"scale");k=m.getUniformLocation(s,"rotation");l=m.getUniformLocation(s,"screenPosition")}m.useProgram(s);q.initAttributes();q.enableAttribute(n);q.enableAttribute(p);q.disableUnusedAttributes();m.uniform1i(e,0);m.uniform1i(d,1);m.bindBuffer(m.ARRAY_BUFFER,u);m.vertexAttribPointer(n,2,m.FLOAT,!1,16,0);m.vertexAttribPointer(p,2,m.FLOAT,!1,16,8);m.bindBuffer(m.ELEMENT_ARRAY_BUFFER,v);q.disable(m.CULL_FACE);q.setDepthWrite(!1);L=0;for(I=b.length;L<I;L++)if(F=16/y.w,B.set(F*z,F),H=b[L],x.set(H.matrixWorld.elements[12],
 H.matrixWorld.elements[13],H.matrixWorld.elements[14]),x.applyMatrix4(C.matrixWorldInverse),x.applyProjection(C.projectionMatrix),M.copy(x),J.x=y.x+M.x*A+A-8,J.y=y.y+M.y*E+E-8,!0===O.containsPoint(J)){q.activeTexture(m.TEXTURE0);q.bindTexture(m.TEXTURE_2D,null);q.activeTexture(m.TEXTURE1);q.bindTexture(m.TEXTURE_2D,w);m.copyTexImage2D(m.TEXTURE_2D,0,m.RGB,J.x,J.y,16,16,0);m.uniform1i(c,0);m.uniform2f(h,B.x,B.y);m.uniform3f(l,M.x,M.y,M.z);q.disable(m.BLEND);q.enable(m.DEPTH_TEST);m.drawElements(m.TRIANGLES,
 6,m.UNSIGNED_SHORT,0);q.activeTexture(m.TEXTURE0);q.bindTexture(m.TEXTURE_2D,D);m.copyTexImage2D(m.TEXTURE_2D,0,m.RGBA,J.x,J.y,16,16,0);m.uniform1i(c,1);q.disable(m.DEPTH_TEST);q.activeTexture(m.TEXTURE1);q.bindTexture(m.TEXTURE_2D,w);m.drawElements(m.TRIANGLES,6,m.UNSIGNED_SHORT,0);H.positionScreen.copy(M);H.customUpdateCallback?H.customUpdateCallback(H):H.updateLensFlares();m.uniform1i(c,2);q.enable(m.BLEND);for(var P=0,R=H.lensFlares.length;P<R;P++){var Q=H.lensFlares[P];.001<Q.opacity&&.001<Q.scale&&
 (M.x=Q.x,M.y=Q.y,M.z=Q.z,F=Q.size*Q.scale/y.w,B.x=F*z,B.y=F,m.uniform3f(l,M.x,M.y,M.z),m.uniform2f(h,B.x,B.y),m.uniform1f(k,Q.rotation),m.uniform1f(f,Q.opacity),m.uniform3f(g,Q.color.r,Q.color.g,Q.color.b),q.setBlending(Q.blending,Q.blendEquation,Q.blendSrc,Q.blendDst),a.setTexture(Q.texture,1),m.drawElements(m.TRIANGLES,6,m.UNSIGNED_SHORT,0))}}q.enable(m.CULL_FACE);q.enable(m.DEPTH_TEST);q.setDepthWrite(!0);a.resetGLState()}}};
-THREE.SpritePlugin=function(a,b){var c,d,e,f,g,h,k,l,n,p,m,q,u,v,t,s,w;function D(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:b.id-a.id}var x=a.context,C=a.state,y,z,A,E,F=new THREE.Vector3,B=new THREE.Quaternion,M=new THREE.Vector3;this.render=function(J,O){if(0!==b.length){if(void 0===A){var K=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),I=new Uint16Array([0,1,2,0,2,3]);y=x.createBuffer();z=x.createBuffer();x.bindBuffer(x.ARRAY_BUFFER,
-y);x.bufferData(x.ARRAY_BUFFER,K,x.STATIC_DRAW);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,z);x.bufferData(x.ELEMENT_ARRAY_BUFFER,I,x.STATIC_DRAW);var K=x.createProgram(),I=x.createShader(x.VERTEX_SHADER),H=x.createShader(x.FRAGMENT_SHADER);x.shaderSource(I,["precision "+a.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n"));
+THREE.SpritePlugin=function(a,b){var c,d,e,f,g,h,k,l,n,p,m,q,u,v,t,s,w;function D(a,b){return a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.z!==b.z?b.z-a.z:b.id-a.id}var x=a.context,C=a.state,y,z,A,E,F=new THREE.Vector3,B=new THREE.Quaternion,M=new THREE.Vector3;this.render=function(J,O){if(0!==b.length){if(void 0===A){var L=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),I=new Uint16Array([0,1,2,0,2,3]);y=x.createBuffer();z=x.createBuffer();x.bindBuffer(x.ARRAY_BUFFER,
+y);x.bufferData(x.ARRAY_BUFFER,L,x.STATIC_DRAW);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,z);x.bufferData(x.ELEMENT_ARRAY_BUFFER,I,x.STATIC_DRAW);var L=x.createProgram(),I=x.createShader(x.VERTEX_SHADER),H=x.createShader(x.FRAGMENT_SHADER);x.shaderSource(I,["precision "+a.getPrecision()+" float;","uniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position * scale;\nvec2 rotatedPosition;\nrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\nrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\nvec4 finalPosition;\nfinalPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition;\nfinalPosition = projectionMatrix * finalPosition;\ngl_Position = finalPosition;\n}"].join("\n"));
 x.shaderSource(H,["precision "+a.getPrecision()+" float;","uniform vec3 color;\nuniform sampler2D map;\nuniform float opacity;\nuniform int fogType;\nuniform vec3 fogColor;\nuniform float fogDensity;\nuniform float fogNear;\nuniform float fogFar;\nuniform float alphaTest;\nvarying vec2 vUV;\nvoid main() {\nvec4 texture = texture2D( map, vUV );\nif ( texture.a < alphaTest ) discard;\ngl_FragColor = vec4( color * texture.xyz, texture.a * opacity );\nif ( fogType > 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n"));
-x.compileShader(I);x.compileShader(H);x.attachShader(K,I);x.attachShader(K,H);x.linkProgram(K);A=K;s=x.getAttribLocation(A,"position");w=x.getAttribLocation(A,"uv");c=x.getUniformLocation(A,"uvOffset");d=x.getUniformLocation(A,"uvScale");e=x.getUniformLocation(A,"rotation");f=x.getUniformLocation(A,"scale");g=x.getUniformLocation(A,"color");h=x.getUniformLocation(A,"map");k=x.getUniformLocation(A,"opacity");l=x.getUniformLocation(A,"modelViewMatrix");n=x.getUniformLocation(A,"projectionMatrix");p=
-x.getUniformLocation(A,"fogType");m=x.getUniformLocation(A,"fogDensity");q=x.getUniformLocation(A,"fogNear");u=x.getUniformLocation(A,"fogFar");v=x.getUniformLocation(A,"fogColor");t=x.getUniformLocation(A,"alphaTest");K=document.createElement("canvas");K.width=8;K.height=8;I=K.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);E=new THREE.Texture(K);E.needsUpdate=!0}x.useProgram(A);C.initAttributes();C.enableAttribute(s);C.enableAttribute(w);C.disableUnusedAttributes();C.disable(x.CULL_FACE);
-C.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,y);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,z);x.uniformMatrix4fv(n,!1,O.projectionMatrix.elements);C.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=K=0;(H=J.fog)?(x.uniform3f(v,H.color.r,H.color.g,H.color.b),H instanceof THREE.Fog?(x.uniform1f(q,H.near),x.uniform1f(u,H.far),x.uniform1i(p,1),I=K=1):H instanceof THREE.FogExp2&&(x.uniform1f(m,H.density),x.uniform1i(p,2),I=K=2)):
-(x.uniform1i(p,0),I=K=0);for(var H=0,P=b.length;H<P;H++){var R=b[H];R.modelViewMatrix.multiplyMatrices(O.matrixWorldInverse,R.matrixWorld);R.z=-R.modelViewMatrix.elements[14]}b.sort(D);for(var Q=[],H=0,P=b.length;H<P;H++){var R=b[H],N=R.material;x.uniform1f(t,N.alphaTest);x.uniformMatrix4fv(l,!1,R.modelViewMatrix.elements);R.matrixWorld.decompose(F,B,M);Q[0]=M.x;Q[1]=M.y;R=0;J.fog&&N.fog&&(R=I);K!==R&&(x.uniform1i(p,R),K=R);null!==N.map?(x.uniform2f(c,N.map.offset.x,N.map.offset.y),x.uniform2f(d,
+x.compileShader(I);x.compileShader(H);x.attachShader(L,I);x.attachShader(L,H);x.linkProgram(L);A=L;s=x.getAttribLocation(A,"position");w=x.getAttribLocation(A,"uv");c=x.getUniformLocation(A,"uvOffset");d=x.getUniformLocation(A,"uvScale");e=x.getUniformLocation(A,"rotation");f=x.getUniformLocation(A,"scale");g=x.getUniformLocation(A,"color");h=x.getUniformLocation(A,"map");k=x.getUniformLocation(A,"opacity");l=x.getUniformLocation(A,"modelViewMatrix");n=x.getUniformLocation(A,"projectionMatrix");p=
+x.getUniformLocation(A,"fogType");m=x.getUniformLocation(A,"fogDensity");q=x.getUniformLocation(A,"fogNear");u=x.getUniformLocation(A,"fogFar");v=x.getUniformLocation(A,"fogColor");t=x.getUniformLocation(A,"alphaTest");L=document.createElement("canvas");L.width=8;L.height=8;I=L.getContext("2d");I.fillStyle="white";I.fillRect(0,0,8,8);E=new THREE.Texture(L);E.needsUpdate=!0}x.useProgram(A);C.initAttributes();C.enableAttribute(s);C.enableAttribute(w);C.disableUnusedAttributes();C.disable(x.CULL_FACE);
+C.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,y);x.vertexAttribPointer(s,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,z);x.uniformMatrix4fv(n,!1,O.projectionMatrix.elements);C.activeTexture(x.TEXTURE0);x.uniform1i(h,0);I=L=0;(H=J.fog)?(x.uniform3f(v,H.color.r,H.color.g,H.color.b),H instanceof THREE.Fog?(x.uniform1f(q,H.near),x.uniform1f(u,H.far),x.uniform1i(p,1),I=L=1):H instanceof THREE.FogExp2&&(x.uniform1f(m,H.density),x.uniform1i(p,2),I=L=2)):
+(x.uniform1i(p,0),I=L=0);for(var H=0,P=b.length;H<P;H++){var R=b[H];R.modelViewMatrix.multiplyMatrices(O.matrixWorldInverse,R.matrixWorld);R.z=-R.modelViewMatrix.elements[14]}b.sort(D);for(var Q=[],H=0,P=b.length;H<P;H++){var R=b[H],N=R.material;x.uniform1f(t,N.alphaTest);x.uniformMatrix4fv(l,!1,R.modelViewMatrix.elements);R.matrixWorld.decompose(F,B,M);Q[0]=M.x;Q[1]=M.y;R=0;J.fog&&N.fog&&(R=I);L!==R&&(x.uniform1i(p,R),L=R);null!==N.map?(x.uniform2f(c,N.map.offset.x,N.map.offset.y),x.uniform2f(d,
 N.map.repeat.x,N.map.repeat.y)):(x.uniform2f(c,0,0),x.uniform2f(d,1,1));x.uniform1f(k,N.opacity);x.uniform3f(g,N.color.r,N.color.g,N.color.b);x.uniform1f(e,N.rotation);x.uniform2fv(f,Q);C.setBlending(N.blending,N.blendEquation,N.blendSrc,N.blendDst);C.setDepthTest(N.depthTest);C.setDepthWrite(N.depthWrite);N.map&&N.map.image&&N.map.image.width?a.setTexture(N.map,0):a.setTexture(E,0);x.drawElements(x.TRIANGLES,6,x.UNSIGNED_SHORT,0)}C.enable(x.CULL_FACE);a.resetGLState()}}};
 Object.defineProperties(THREE.Box2.prototype,{empty:{value:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()}},isIntersectionBox:{value:function(a){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)}}});
 Object.defineProperties(THREE.Box3.prototype,{empty:{value:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()}},isIntersectionBox:{value:function(a){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)}},isIntersectionSphere:{value:function(a){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)}}});
@@ -864,7 +869,7 @@ b*a};return THREE.Curve.create(function(a){this.points=a||[];this.closed=!1},fun
 this.type||"centripetal"===this.type||"chordal"===this.type){var m="chordal"===this.type?.5:.25;k=Math.pow(l.distanceToSquared(n),m);h=Math.pow(n.distanceToSquared(p),m);m=Math.pow(p.distanceToSquared(g),m);1E-4>h&&(h=1);1E-4>k&&(k=h);1E-4>m&&(m=h);c.initNonuniformCatmullRom(l.x,n.x,p.x,g.x,k,h,m);d.initNonuniformCatmullRom(l.y,n.y,p.y,g.y,k,h,m);e.initNonuniformCatmullRom(l.z,n.z,p.z,g.z,k,h,m)}else"catmullrom"===this.type&&(k=void 0!==this.tension?this.tension:.5,c.initCatmullRom(l.x,n.x,p.x,g.x,
 k),d.initCatmullRom(l.y,n.y,p.y,g.y,k),e.initCatmullRom(l.z,n.z,p.z,g.z,k));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();THREE.ClosedSplineCurve3=function(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Please use THREE.CatmullRomCurve3.");THREE.CatmullRomCurve3.call(this,a);this.type="catmullrom";this.closed=!0};THREE.ClosedSplineCurve3.prototype=Object.create(THREE.CatmullRomCurve3.prototype);
 THREE.BoxGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new THREE.BoxBufferGeometry(a,b,c,d,e,f));this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;
-THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,M,J){var O=f/l,K=g/M,I=f/2,H=g/2,P=k/2;g=l+1;for(var R=M+1,Q=f=0,N=new THREE.Vector3,G=0;G<R;G++)for(var Z=G*K-H,T=0;T<g;T++)N[a]=(T*O-I)*d,N[b]=Z*e,N[c]=P,p[u]=N.x,p[u+1]=N.y,p[u+2]=N.z,N[a]=0,N[b]=0,N[c]=0<k?1:-1,m[u]=N.x,m[u+1]=N.y,m[u+2]=N.z,q[v]=T/l,q[v+1]=1-G/M,u+=3,v+=2,f+=1;for(G=0;G<M;G++)for(T=0;T<l;T++)a=s+T+g*(G+1),b=s+(T+1)+g*(G+1),c=s+(T+1)+g*G,n[t]=s+T+g*G,n[t+1]=a,n[t+2]=c,n[t+3]=a,n[t+4]=b,n[t+5]=c,t+=6,Q+=
+THREE.BoxBufferGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,k,l,M,J){var O=f/l,L=g/M,I=f/2,H=g/2,P=k/2;g=l+1;for(var R=M+1,Q=f=0,N=new THREE.Vector3,G=0;G<R;G++)for(var Z=G*L-H,U=0;U<g;U++)N[a]=(U*O-I)*d,N[b]=Z*e,N[c]=P,p[u]=N.x,p[u+1]=N.y,p[u+2]=N.z,N[a]=0,N[b]=0,N[c]=0<k?1:-1,m[u]=N.x,m[u+1]=N.y,m[u+2]=N.z,q[v]=U/l,q[v+1]=1-G/M,u+=3,v+=2,f+=1;for(G=0;G<M;G++)for(U=0;U<l;U++)a=s+U+g*(G+1),b=s+(U+1)+g*(G+1),c=s+(U+1)+g*G,n[t]=s+U+g*G,n[t+1]=a,n[t+2]=c,n[t+3]=a,n[t+4]=b,n[t+5]=c,t+=6,Q+=
 6;h.addGroup(w,Q,J);w+=Q;s+=f}THREE.BufferGeometry.call(this);this.type="BoxBufferGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};var h=this;d=Math.floor(d)||1;e=Math.floor(e)||1;f=Math.floor(f)||1;var k=function(a,b,c){a=0+a*b*2+a*c*2;a+=c*b*2;return 4*a}(d,e,f),l=k/4*6,n=new (65535<l?Uint32Array:Uint16Array)(l),p=new Float32Array(3*k),m=new Float32Array(3*k),q=new Float32Array(2*k),u=0,v=0,t=0,s=0,w=0;g("z","y","x",-1,-1,c,b,a,f,e,0);g("z","y",
 "x",1,-1,c,b,-a,f,e,1);g("x","z","y",1,1,a,c,b,d,f,2);g("x","z","y",1,-1,a,c,-b,d,f,3);g("x","y","z",1,-1,a,b,c,d,e,4);g("x","y","z",-1,-1,a,b,-c,d,e,5);this.setIndex(new THREE.BufferAttribute(n,1));this.addAttribute("position",new THREE.BufferAttribute(p,3));this.addAttribute("normal",new THREE.BufferAttribute(m,3));this.addAttribute("uv",new THREE.BufferAttribute(q,2))};THREE.BoxBufferGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);
 THREE.BoxBufferGeometry.prototype.constructor=THREE.BoxBufferGeometry;THREE.CircleGeometry=function(a,b,c,d){THREE.Geometry.call(this);this.type="CircleGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};this.fromBufferGeometry(new THREE.CircleBufferGeometry(a,b,c,d))};THREE.CircleGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.CircleGeometry.prototype.constructor=THREE.CircleGeometry;
@@ -883,9 +888,9 @@ THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||cons
 f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(c=-e,a=d,d=Math.sqrt(h)):(c=d,a=e,d=Math.sqrt(h/2));return new THREE.Vector2(c/d,a/d)}function e(a,b){var c,d;for(G=a.length;0<=--G;){c=G;d=G-1;0>d&&(d=a.length-1);for(var e=0,f=q+2*n,e=0;e<f;e++){var g=R*e,h=R*(e+1),k=b+c+g,g=b+d+g,l=b+d+h,h=b+c+h,k=k+F,g=g+F,l=l+F,h=h+F;E.faces.push(new THREE.Face3(k,g,h,null,null,1));E.faces.push(new THREE.Face3(g,l,h,null,null,1));k=s.generateSideWallUV(E,
 k,g,l,h);E.faceVertexUvs[0].push([k[0],k[1],k[3]]);E.faceVertexUvs[0].push([k[1],k[2],k[3]])}}}function f(a,b,c){E.vertices.push(new THREE.Vector3(a,b,c))}function g(a,b,c){a+=F;b+=F;c+=F;E.faces.push(new THREE.Face3(a,b,c,null,null,0));a=s.generateTopUV(E,a,b,c);E.faceVertexUvs[0].push(a)}var h=void 0!==b.amount?b.amount:100,k=void 0!==b.bevelThickness?b.bevelThickness:6,l=void 0!==b.bevelSize?b.bevelSize:k-2,n=void 0!==b.bevelSegments?b.bevelSegments:3,p=void 0!==b.bevelEnabled?b.bevelEnabled:!0,
 m=void 0!==b.curveSegments?b.curveSegments:12,q=void 0!==b.steps?b.steps:1,u=b.extrudePath,v,t=!1,s=void 0!==b.UVGenerator?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,w,D,x,C;u&&(v=u.getSpacedPoints(q),t=!0,p=!1,w=void 0!==b.frames?b.frames:new THREE.TubeGeometry.FrenetFrames(u,q,!1),D=new THREE.Vector3,x=new THREE.Vector3,C=new THREE.Vector3);p||(l=k=n=0);var y,z,A,E=this,F=this.vertices.length,u=a.extractPoints(m),m=u.shape,B=u.holes;if(u=!THREE.ShapeUtils.isClockWise(m)){m=m.reverse();
-z=0;for(A=B.length;z<A;z++)y=B[z],THREE.ShapeUtils.isClockWise(y)&&(B[z]=y.reverse());u=!1}var M=THREE.ShapeUtils.triangulateShape(m,B),J=m;z=0;for(A=B.length;z<A;z++)y=B[z],m=m.concat(y);var O,K,I,H,P,R=m.length,Q,N=M.length,u=[],G=0;I=J.length;O=I-1;for(K=G+1;G<I;G++,O++,K++)O===I&&(O=0),K===I&&(K=0),u[G]=d(J[G],J[O],J[K]);var Z=[],T,$=u.concat();z=0;for(A=B.length;z<A;z++){y=B[z];T=[];G=0;I=y.length;O=I-1;for(K=G+1;G<I;G++,O++,K++)O===I&&(O=0),K===I&&(K=0),T[G]=d(y[G],y[O],y[K]);Z.push(T);$=$.concat(T)}for(O=
-0;O<n;O++){I=O/n;H=k*(1-I);K=l*Math.sin(I*Math.PI/2);G=0;for(I=J.length;G<I;G++)P=c(J[G],u[G],K),f(P.x,P.y,-H);z=0;for(A=B.length;z<A;z++)for(y=B[z],T=Z[z],G=0,I=y.length;G<I;G++)P=c(y[G],T[G],K),f(P.x,P.y,-H)}K=l;for(G=0;G<R;G++)P=p?c(m[G],$[G],K):m[G],t?(x.copy(w.normals[0]).multiplyScalar(P.x),D.copy(w.binormals[0]).multiplyScalar(P.y),C.copy(v[0]).add(x).add(D),f(C.x,C.y,C.z)):f(P.x,P.y,0);for(I=1;I<=q;I++)for(G=0;G<R;G++)P=p?c(m[G],$[G],K):m[G],t?(x.copy(w.normals[I]).multiplyScalar(P.x),D.copy(w.binormals[I]).multiplyScalar(P.y),
-C.copy(v[I]).add(x).add(D),f(C.x,C.y,C.z)):f(P.x,P.y,h/q*I);for(O=n-1;0<=O;O--){I=O/n;H=k*(1-I);K=l*Math.sin(I*Math.PI/2);G=0;for(I=J.length;G<I;G++)P=c(J[G],u[G],K),f(P.x,P.y,h+H);z=0;for(A=B.length;z<A;z++)for(y=B[z],T=Z[z],G=0,I=y.length;G<I;G++)P=c(y[G],T[G],K),t?f(P.x,P.y+v[q-1].y,v[q-1].x+H):f(P.x,P.y,h+H)}(function(){if(p){var a;a=0*R;for(G=0;G<N;G++)Q=M[G],g(Q[2]+a,Q[1]+a,Q[0]+a);a=q+2*n;a*=R;for(G=0;G<N;G++)Q=M[G],g(Q[0]+a,Q[1]+a,Q[2]+a)}else{for(G=0;G<N;G++)Q=M[G],g(Q[2],Q[1],Q[0]);for(G=
+z=0;for(A=B.length;z<A;z++)y=B[z],THREE.ShapeUtils.isClockWise(y)&&(B[z]=y.reverse());u=!1}var M=THREE.ShapeUtils.triangulateShape(m,B),J=m;z=0;for(A=B.length;z<A;z++)y=B[z],m=m.concat(y);var O,L,I,H,P,R=m.length,Q,N=M.length,u=[],G=0;I=J.length;O=I-1;for(L=G+1;G<I;G++,O++,L++)O===I&&(O=0),L===I&&(L=0),u[G]=d(J[G],J[O],J[L]);var Z=[],U,$=u.concat();z=0;for(A=B.length;z<A;z++){y=B[z];U=[];G=0;I=y.length;O=I-1;for(L=G+1;G<I;G++,O++,L++)O===I&&(O=0),L===I&&(L=0),U[G]=d(y[G],y[O],y[L]);Z.push(U);$=$.concat(U)}for(O=
+0;O<n;O++){I=O/n;H=k*(1-I);L=l*Math.sin(I*Math.PI/2);G=0;for(I=J.length;G<I;G++)P=c(J[G],u[G],L),f(P.x,P.y,-H);z=0;for(A=B.length;z<A;z++)for(y=B[z],U=Z[z],G=0,I=y.length;G<I;G++)P=c(y[G],U[G],L),f(P.x,P.y,-H)}L=l;for(G=0;G<R;G++)P=p?c(m[G],$[G],L):m[G],t?(x.copy(w.normals[0]).multiplyScalar(P.x),D.copy(w.binormals[0]).multiplyScalar(P.y),C.copy(v[0]).add(x).add(D),f(C.x,C.y,C.z)):f(P.x,P.y,0);for(I=1;I<=q;I++)for(G=0;G<R;G++)P=p?c(m[G],$[G],L):m[G],t?(x.copy(w.normals[I]).multiplyScalar(P.x),D.copy(w.binormals[I]).multiplyScalar(P.y),
+C.copy(v[I]).add(x).add(D),f(C.x,C.y,C.z)):f(P.x,P.y,h/q*I);for(O=n-1;0<=O;O--){I=O/n;H=k*(1-I);L=l*Math.sin(I*Math.PI/2);G=0;for(I=J.length;G<I;G++)P=c(J[G],u[G],L),f(P.x,P.y,h+H);z=0;for(A=B.length;z<A;z++)for(y=B[z],U=Z[z],G=0,I=y.length;G<I;G++)P=c(y[G],U[G],L),t?f(P.x,P.y+v[q-1].y,v[q-1].x+H):f(P.x,P.y,h+H)}(function(){if(p){var a;a=0*R;for(G=0;G<N;G++)Q=M[G],g(Q[2]+a,Q[1]+a,Q[0]+a);a=q+2*n;a*=R;for(G=0;G<N;G++)Q=M[G],g(Q[0]+a,Q[1]+a,Q[2]+a)}else{for(G=0;G<N;G++)Q=M[G],g(Q[2],Q[1],Q[0]);for(G=
 0;G<N;G++)Q=M[G],g(Q[0]+R*q,Q[1]+R*q,Q[2]+R*q)}})();(function(){var a=0;e(J,a);a+=J.length;z=0;for(A=B.length;z<A;z++)y=B[z],e(y,a),a+=y.length})()};
 THREE.ExtrudeGeometry.WorldUVGenerator={generateTopUV:function(a,b,c,d){a=a.vertices;b=a[b];c=a[c];d=a[d];return[new THREE.Vector2(b.x,b.y),new THREE.Vector2(c.x,c.y),new THREE.Vector2(d.x,d.y)]},generateSideWallUV:function(a,b,c,d,e){a=a.vertices;b=a[b];c=a[c];d=a[d];e=a[e];return.01>Math.abs(b.y-c.y)?[new THREE.Vector2(b.x,1-b.z),new THREE.Vector2(c.x,1-c.z),new THREE.Vector2(d.x,1-d.z),new THREE.Vector2(e.x,1-e.z)]:[new THREE.Vector2(b.y,1-b.z),new THREE.Vector2(c.y,1-c.z),new THREE.Vector2(d.y,
 1-d.z),new THREE.Vector2(e.y,1-e.z)]}};THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);this.type="ShapeGeometry";!1===Array.isArray(a)&&(a=[a]);this.addShapeList(a,b);this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.constructor=THREE.ShapeGeometry;THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;c<d;c++)this.addShape(a[c],b);return this};

+ 1 - 0
utils/build/externs/common.js

@@ -5,3 +5,4 @@ var module;
 var exports;
 var JSON;
 var performance;
+var WebGL2RenderingContext;