Browse Source

Updated builds.

Mr.doob 9 years ago
parent
commit
c1b9f2eae8
2 changed files with 91 additions and 91 deletions
  1. 12 12
      build/three.js
  2. 79 79
      build/three.min.js

+ 12 - 12
build/three.js

@@ -26145,7 +26145,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			} else if ( material instanceof THREE.PointsMaterial ) {
 
-				refreshUniformsParticle( m_uniforms, material );
+				refreshUniformsPoints( m_uniforms, material );
 
 			} else if ( material instanceof THREE.MeshPhongMaterial ) {
 
@@ -26293,11 +26293,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 	}
 
-	function refreshUniformsParticle ( uniforms, material ) {
+	function refreshUniformsPoints ( uniforms, material ) {
 
 		uniforms.psColor.value = material.color;
 		uniforms.opacity.value = material.opacity;
-		uniforms.size.value = material.size;
+		uniforms.size.value = material.size * pixelRatio;
 		uniforms.scale.value = _canvas.height / 2.0; // TODO: Cache this.
 
 		uniforms.map.value = material.map;
@@ -26658,11 +26658,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 					// TODO: Optimize this.
 					for( var propertyName in uniform.properties ) {
-	
+
 						var property = uniform.properties[ propertyName ];
 						var locationProperty =  location[ propertyName ];
 						var valueProperty = value[ propertyName ];
-	
+
 						switch( property.type ) {
 							case 'f':
 								_gl.uniform1f( locationProperty, valueProperty );
@@ -26691,11 +26691,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 					for( var i = 0; i < value.length; i ++ ) {
 
 						for( var propertyName in uniform.properties ) {
-							
+
 							var property = uniform.properties[ propertyName ];
 							var locationProperty =  location[ i ][ propertyName ];
 							var valueProperty = value[i][ propertyName ];
-	
+
 							switch( property.type ) {
 								case 'f':
 									_gl.uniform1f( locationProperty, valueProperty );
@@ -26717,7 +26717,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 						}
 
 					}
-					
+
 					break;
 
 				case 'iv1':
@@ -27005,7 +27005,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				}
 
 				var lightUniforms = light.__webglUniforms;
-				zlights.directional.push( lightUniforms ); 
+				zlights.directional.push( lightUniforms );
 
 				if ( ! light.visible ) {
 					lightUniforms.color.setRGB( 0, 0, 0 );
@@ -27031,7 +27031,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				}
 
 				var lightUniforms = light.__webglUniforms;
-				zlights.point.push( lightUniforms ); 
+				zlights.point.push( lightUniforms );
 
 				if ( ! light.visible ) {
 					lightUniforms.color.setRGB( 0, 0, 0 );
@@ -27059,7 +27059,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				}
 
 				var lightUniforms = light.__webglUniforms;
-				zlights.spot.push( lightUniforms ); 
+				zlights.spot.push( lightUniforms );
 
 				if ( ! light.visible ) {
 					lightUniforms.color.setRGB( 0, 0, 0 );
@@ -27092,7 +27092,7 @@ THREE.WebGLRenderer = function ( parameters ) {
 				}
 
 				var lightUniforms = light.__webglUniforms;
-				zlights.hemi.push( lightUniforms ); 
+				zlights.hemi.push( lightUniforms );
 
 				if ( ! light.visible ) {
 					lightUniforms.skyColor.setRGB( 0, 0, 0 );

+ 79 - 79
build/three.min.js

@@ -111,8 +111,8 @@ e=Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,k=c*h,m=c*e;b[0]=g*h;b[4]=-g*e
 m*d+a,b[9]=l*d-k,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,k=c*g,m=c*d,b[0]=g*h,b[4]=m-a*e,b[8]=k*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+k,b[10]=a-m*e):"XZY"===a.order&&(a=f*g,l=f*d,k=c*g,m=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+m,b[5]=f*h,b[9]=l*e-k,b[2]=k*e-l,b[6]=c*h,b[10]=m*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},setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");
 return this.makeRotationFromQuaternion(a)},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,l=e+e;a=c*g;var k=c*h,c=c*l,m=d*h,d=d*l,e=e*l,g=f*g,h=f*h,f=f*l;b[0]=1-(m+e);b[4]=k-f;b[8]=c+h;b[1]=k+f;b[5]=1-(a+e);b[9]=d-g;b[2]=c-h;b[6]=d+g;b[10]=1-(a+m);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)},
-multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],l=c[12],k=c[1],m=c[5],q=c[9],n=c[13],p=c[2],s=c[6],t=c[10],v=c[14],u=c[3],w=c[7],E=c[11],c=c[15],x=d[0],C=d[4],A=d[8],B=d[12],y=d[1],H=d[5],G=d[9],D=d[13],L=d[2],M=d[6],N=d[10],K=d[14],z=d[3],I=d[7],O=d[11],d=d[15];e[0]=f*x+g*y+h*L+l*z;e[4]=f*C+g*H+h*M+l*I;e[8]=f*A+g*G+h*N+l*O;e[12]=f*B+g*D+h*K+l*d;e[1]=k*x+m*y+q*L+n*z;e[5]=k*C+m*H+q*M+n*I;e[9]=k*A+m*G+q*N+n*O;e[13]=k*B+m*D+q*K+n*d;e[2]=p*x+s*y+t*L+v*
-z;e[6]=p*C+s*H+t*M+v*I;e[10]=p*A+s*G+t*N+v*O;e[14]=p*B+s*D+t*K+v*d;e[3]=u*x+w*y+E*L+c*z;e[7]=u*C+w*H+E*M+c*I;e[11]=u*A+w*G+E*N+c*O;e[15]=u*B+w*D+E*K+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;
+multiplyMatrices:function(a,b){var c=a.elements,d=b.elements,e=this.elements,f=c[0],g=c[4],h=c[8],l=c[12],k=c[1],m=c[5],q=c[9],n=c[13],p=c[2],s=c[6],t=c[10],v=c[14],u=c[3],w=c[7],E=c[11],c=c[15],x=d[0],C=d[4],A=d[8],B=d[12],y=d[1],I=d[5],H=d[9],D=d[13],L=d[2],M=d[6],N=d[10],J=d[14],G=d[3],z=d[7],O=d[11],d=d[15];e[0]=f*x+g*y+h*L+l*G;e[4]=f*C+g*I+h*M+l*z;e[8]=f*A+g*H+h*N+l*O;e[12]=f*B+g*D+h*J+l*d;e[1]=k*x+m*y+q*L+n*G;e[5]=k*C+m*I+q*M+n*z;e[9]=k*A+m*H+q*N+n*O;e[13]=k*B+m*D+q*J+n*d;e[2]=p*x+s*y+t*L+v*
+G;e[6]=p*C+s*I+t*M+v*z;e[10]=p*A+s*H+t*N+v*O;e[14]=p*B+s*D+t*J+v*d;e[3]=u*x+w*y+E*L+c*G;e[7]=u*C+w*I+E*M+c*z;e[11]=u*A+w*H+E*N+c*O;e[15]=u*B+w*D+E*J+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},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) or vector.applyProjection( matrix ) instead.");return a.applyProjection(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector3Array:function(a){console.warn("THREE.Matrix4: .multiplyVector3Array() has been renamed. Use matrix.applyToVector3Array( array ) instead.");
 return this.applyToVector3Array(a)},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}}(),rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},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],l=a[13],k=a[2],m=a[6],q=a[10],n=a[14];return a[3]*(+e*h*m-d*l*
@@ -481,10 +481,10 @@ THREE.Mesh.prototype.updateMorphTargets=function(){if(void 0!==this.geometry.mor
 THREE.Mesh.prototype.getMorphTargetIndexByName=function(a){if(void 0!==this.morphTargetDictionary[a])return this.morphTargetDictionary[a];console.warn("THREE.Mesh.getMorphTargetIndexByName: morph target "+a+" does not exist. Returning 0.");return 0};
 THREE.Mesh.prototype.raycast=function(){function a(a,b,c,d,e,f,g){THREE.Triangle.barycoordFromPoint(a,b,c,d,t);e.multiplyScalar(t.x);f.multiplyScalar(t.y);g.multiplyScalar(t.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;u.copy(g);u.applyMatrix4(a.matrixWorld);c=b.ray.origin.distanceTo(u);return c<b.near||c>b.far?null:{distance:c,point:u.clone(),
 object:a}}function c(c,d,e,f,k,m,q,u){g.fromArray(f,3*m);h.fromArray(f,3*q);l.fromArray(f,3*u);if(c=b(c,d,e,g,h,l,v))k&&(n.fromArray(k,2*m),p.fromArray(k,2*q),s.fromArray(k,2*u),c.uv=a(v,g,h,l,n,p,s)),c.face=new THREE.Face3(m,q,u,THREE.Triangle.normal(g,h,l)),c.faceIndex=m;return c}var d=new THREE.Matrix4,e=new THREE.Ray,f=new THREE.Sphere,g=new THREE.Vector3,h=new THREE.Vector3,l=new THREE.Vector3,k=new THREE.Vector3,m=new THREE.Vector3,q=new THREE.Vector3,n=new THREE.Vector2,p=new THREE.Vector2,
-s=new THREE.Vector2,t=new THREE.Vector3,v=new THREE.Vector3,u=new THREE.Vector3;return function(u,t){var x=this.geometry,C=this.material;if(void 0!==C){null===x.boundingSphere&&x.computeBoundingSphere();var A=this.matrixWorld;f.copy(x.boundingSphere);f.applyMatrix4(A);if(!1!==u.ray.intersectsSphere(f)&&(d.getInverse(A),e.copy(u.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox))){var B,y;if(x instanceof THREE.BufferGeometry){var H,G,C=x.index,A=x.attributes,x=A.position.array;
-void 0!==A.uv&&(B=A.uv.array);if(null!==C)for(var A=C.array,D=0,L=A.length;D<L;D+=3){if(C=A[D],H=A[D+1],G=A[D+2],y=c(this,u,e,x,B,C,H,G))y.faceIndex=Math.floor(D/3),t.push(y)}else for(D=0,L=x.length;D<L;D+=9)if(C=D/3,H=C+1,G=C+2,y=c(this,u,e,x,B,C,H,G))y.index=C,t.push(y)}else if(x instanceof THREE.Geometry){var M,N,A=C instanceof THREE.MeshFaceMaterial,D=!0===A?C.materials:null,L=x.vertices;H=x.faces;G=x.faceVertexUvs[0];0<G.length&&(B=G);for(var K=0,z=H.length;K<z;K++){var I=H[K];y=!0===A?D[I.materialIndex]:
-C;if(void 0!==y){G=L[I.a];M=L[I.b];N=L[I.c];if(!0===y.morphTargets){y=x.morphTargets;var O=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);l.set(0,0,0);for(var R=0,P=y.length;R<P;R++){var Q=O[R];if(0!==Q){var F=y[R].vertices;g.addScaledVector(k.subVectors(F[I.a],G),Q);h.addScaledVector(m.subVectors(F[I.b],M),Q);l.addScaledVector(q.subVectors(F[I.c],N),Q)}}g.add(G);h.add(M);l.add(N);G=g;M=h;N=l}if(y=b(this,u,e,G,M,N,v))B&&(O=B[K],n.copy(O[0]),p.copy(O[1]),s.copy(O[2]),y.uv=a(v,G,M,N,n,p,s)),y.face=
-I,y.faceIndex=K,t.push(y)}}}}}}}();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};
+s=new THREE.Vector2,t=new THREE.Vector3,v=new THREE.Vector3,u=new THREE.Vector3;return function(u,t){var x=this.geometry,C=this.material;if(void 0!==C){null===x.boundingSphere&&x.computeBoundingSphere();var A=this.matrixWorld;f.copy(x.boundingSphere);f.applyMatrix4(A);if(!1!==u.ray.intersectsSphere(f)&&(d.getInverse(A),e.copy(u.ray).applyMatrix4(d),null===x.boundingBox||!1!==e.intersectsBox(x.boundingBox))){var B,y;if(x instanceof THREE.BufferGeometry){var I,H,C=x.index,A=x.attributes,x=A.position.array;
+void 0!==A.uv&&(B=A.uv.array);if(null!==C)for(var A=C.array,D=0,L=A.length;D<L;D+=3){if(C=A[D],I=A[D+1],H=A[D+2],y=c(this,u,e,x,B,C,I,H))y.faceIndex=Math.floor(D/3),t.push(y)}else for(D=0,L=x.length;D<L;D+=9)if(C=D/3,I=C+1,H=C+2,y=c(this,u,e,x,B,C,I,H))y.index=C,t.push(y)}else if(x instanceof THREE.Geometry){var M,N,A=C instanceof THREE.MeshFaceMaterial,D=!0===A?C.materials:null,L=x.vertices;I=x.faces;H=x.faceVertexUvs[0];0<H.length&&(B=H);for(var J=0,G=I.length;J<G;J++){var z=I[J];y=!0===A?D[z.materialIndex]:
+C;if(void 0!==y){H=L[z.a];M=L[z.b];N=L[z.c];if(!0===y.morphTargets){y=x.morphTargets;var O=this.morphTargetInfluences;g.set(0,0,0);h.set(0,0,0);l.set(0,0,0);for(var R=0,P=y.length;R<P;R++){var Q=O[R];if(0!==Q){var F=y[R].vertices;g.addScaledVector(k.subVectors(F[z.a],H),Q);h.addScaledVector(m.subVectors(F[z.b],M),Q);l.addScaledVector(q.subVectors(F[z.c],N),Q)}}g.add(H);h.add(M);l.add(N);H=g;M=h;N=l}if(y=b(this,u,e,H,M,N,v))B&&(O=B[J],n.copy(O[0]),p.copy(O[1]),s.copy(O[2]),y.uv=a(v,H,M,N,n,p,s)),y.face=
+z,y.faceIndex=J,t.push(y)}}}}}}}();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)}};
@@ -584,80 +584,80 @@ THREE.ShaderChunk.logdepthbuf_vertex,"}"].join("\n"),fragmentShader:["uniform sa
 "vec4 pack_depth( const in float depth ) {\n\tconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = mod( depth * bit_shift * vec4( 255 ), vec4( 256 ) ) / vec4( 255 );\n\tres -= res.xxyz * bit_mask;\n\treturn res;\n}\nvoid main() {",THREE.ShaderChunk.logdepthbuf_fragment,"\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragDepthEXT );\n\t#else\n\t\tgl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n\t#endif\n}"].join("\n")},
 distanceRGBA:{uniforms:{lightPos:{type:"v3",value:new THREE.Vector3(0,0,0)}},vertexShader:["varying vec4 vWorldPosition;",THREE.ShaderChunk.common,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.begin_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.project_vertex,THREE.ShaderChunk.worldpos_vertex,"vWorldPosition = worldPosition;\n}"].join("\n"),fragmentShader:["uniform vec3 lightPos;\nvarying vec4 vWorldPosition;",
 THREE.ShaderChunk.common,"vec4 pack1K ( float depth ) {\n   depth /= 1000.0;\n   const vec4 bitSh = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\n\tconst vec4 bitMsk = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\n\tvec4 res = fract( depth * bitSh );\n\tres -= res.xxyz * bitMsk;\n\treturn res; \n}\nfloat unpack1K ( vec4 color ) {\n\tconst vec4 bitSh = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\n\treturn dot( color, bitSh ) * 1000.0;\n}\nvoid main () {\n\tgl_FragColor = pack1K( length( vWorldPosition.xyz - lightPos.xyz ) );\n}"].join("\n")}};
-THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===Q&&(a*=d,b*=d,c*=d);r.clearColor(a,b,c,d)}function c(){J.init();r.viewport(ga,ha,ia,ja);b(U.r,U.g,U.b,V)}function d(){ka=ta=null;la="";ma=-1;pa=!0;J.reset()}function e(a){a.preventDefault();d();c();S.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=S.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)}S.delete(a)}ea.textures--}
+THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===Q&&(a*=d,b*=d,c*=d);r.clearColor(a,b,c,d)}function c(){K.init();r.viewport(ga,ha,ia,ja);b(U.r,U.g,U.b,V)}function d(){ka=ta=null;la="";ma=-1;pa=!0;K.reset()}function e(a){a.preventDefault();d();c();S.clear()}function f(a){a=a.target;a.removeEventListener("dispose",f);a:{var b=S.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)}S.delete(a)}ea.textures--}
 function g(a){a=a.target;a.removeEventListener("dispose",g);var b=S.get(a),c=S.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.__webglRenderbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglRenderbuffer);S.delete(a.texture);S.delete(a)}ea.textures--}function h(a){a=a.target;a.removeEventListener("dispose",
 h);l(a);S.delete(a)}function l(a){var b=S.get(a).program;a.program=void 0;void 0!==b&&na.releaseProgram(b)}function k(a,b){return b[0]-a[0]}function m(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 q(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 n(a,b,c,d,e){var f;c.transparent?
 (d=ba,f=++fa):(d=aa,f=++ca);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=W.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:W.z,group:e},d.push(f))}function p(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)X.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==ua.intersectsObject(a)||va.push(a);else if(a instanceof THREE.LensFlare)wa.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===Y.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),
 W.applyProjection(qa)),n(a,null,a.material,W.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===ua.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===Y.sortObjects&&(W.setFromMatrixPosition(a.matrixWorld),W.applyProjection(qa));var d=oa.update(a);if(c instanceof THREE.MeshFaceMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c<g;c++){var h=e[c],l=f[h.materialIndex];
 !0===l.visible&&n(a,d,l,W.z,h)}else n(a,d,c,W.z,null)}}d=a.children;c=0;for(g=d.length;c<g;c++)p(d[c],b)}}function s(a,b,c,d,e){for(var f=0,g=a.length;f<g;f++){var h=a[f],l=h.object,k=h.geometry,n=void 0===e?h.material:e,h=h.group;l.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,l.matrixWorld);l.normalMatrix.getNormalMatrix(l.modelViewMatrix);if(l instanceof THREE.ImmediateRenderObject){t(n);var m=v(b,c,d,n,l);la="";l.render(function(a){Y.renderBufferImmediate(a,m,n)})}else Y.renderBufferDirect(b,
-c,d,k,n,l,h)}}function t(a){a.side!==THREE.DoubleSide?J.enable(r.CULL_FACE):J.disable(r.CULL_FACE);J.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?J.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):J.setBlending(THREE.NoBlending);J.setDepthFunc(a.depthFunc);J.setDepthTest(a.depthTest);J.setDepthWrite(a.depthWrite);J.setColorWrite(a.colorWrite);J.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}
+c,d,k,n,l,h)}}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):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 v(a,b,c,d,e){ra=0;var f=S.get(d);if(d.needsUpdate||!f.program){a:{var g=S.get(d),k=na.getParameters(d,b,c,e),n=na.getProgramCode(d,k),m=g.program,p=!0;if(void 0===m)d.addEventListener("dispose",h);else if(m.code!==n)l(d);else if(void 0!==k.shaderID)break a;else p=!1;p&&(k.shaderID?(m=THREE.ShaderLib[k.shaderID],g.__webglShader={name:d.type,uniforms:THREE.UniformsUtils.clone(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}):g.__webglShader={name:d.type,uniforms:d.uniforms,
 vertexShader:d.vertexShader,fragmentShader:d.fragmentShader},d.__webglShader=g.__webglShader,m=na.acquireProgram(d,k,n),g.program=m,d.program=m);k=m.getAttributes();if(d.morphTargets)for(n=d.numSupportedMorphTargets=0;n<Y.maxMorphTargets;n++)0<=k["morphTarget"+n]&&d.numSupportedMorphTargets++;if(d.morphNormals)for(n=d.numSupportedMorphNormals=0;n<Y.maxMorphNormals;n++)0<=k["morphNormal"+n]&&d.numSupportedMorphNormals++;g.uniformsList=[];var k=g.program.getUniforms(),q;for(q in g.__webglShader.uniforms)(n=
 k[q])&&g.uniformsList.push([g.__webglShader.uniforms[q],n])}d.needsUpdate=!1}n=m=p=!1;g=f.program;q=g.getUniforms();k=f.__webglShader.uniforms;g.id!==ta&&(r.useProgram(g.program),ta=g.id,n=m=p=!0);d.id!==ma&&(-1===ma&&(n=!0),ma=d.id,m=!0);if(p||a!==ka)r.uniformMatrix4fv(q.projectionMatrix,!1,a.projectionMatrix.elements),Z.logarithmicDepthBuffer&&r.uniform1f(q.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==ka&&(ka=a),(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d instanceof
 THREE.MeshPhysicalMaterial||d.envMap)&&void 0!==q.cameraPosition&&(W.setFromMatrixPosition(a.matrixWorld),r.uniform3f(q.cameraPosition,W.x,W.y,W.z)),(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshPhysicalMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&void 0!==q.viewMatrix&&r.uniformMatrix4fv(q.viewMatrix,!1,a.matrixWorldInverse.elements);d.skinning&&(e.bindMatrix&&void 0!==q.bindMatrix&&r.uniformMatrix4fv(q.bindMatrix,
 !1,e.bindMatrix.elements),e.bindMatrixInverse&&void 0!==q.bindMatrixInverse&&r.uniformMatrix4fv(q.bindMatrixInverse,!1,e.bindMatrixInverse.elements),Z.floatVertexTextures&&e.skeleton&&e.skeleton.useVertexTexture?(void 0!==q.boneTexture&&(p=w(),r.uniform1i(q.boneTexture,p),Y.setTexture(e.skeleton.boneTexture,p)),void 0!==q.boneTextureWidth&&r.uniform1i(q.boneTextureWidth,e.skeleton.boneTextureWidth),void 0!==q.boneTextureHeight&&r.uniform1i(q.boneTextureHeight,e.skeleton.boneTextureHeight)):e.skeleton&&
-e.skeleton.boneMatrices&&void 0!==q.boneGlobalMatrices&&r.uniformMatrix4fv(q.boneGlobalMatrices,!1,e.skeleton.boneMatrices));if(m){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhysicalMaterial||d.lights){if(pa){var n=!0,s=0,t=0,x=0,v,G,E,D=ya,C=a.matrixWorldInverse;D.directional=
-[];D.point=[];D.spot=[];D.hemi=[];c=0;for(m=b.length;c<m;c++)if(p=b[c],v=p.color,G=p.intensity,E=p.distance,p instanceof THREE.AmbientLight)p.visible&&(s+=v.r,t+=v.g,x+=v.b);else if(p instanceof THREE.DirectionalLight){p.__webglUniforms||(p.__webglUniforms={direction:new THREE.Vector3,color:new THREE.Color});var y=p.__webglUniforms;D.directional.push(y);p.visible?(y.direction.setFromMatrixPosition(p.matrixWorld),W.setFromMatrixPosition(p.target.matrixWorld),y.direction.sub(W),y.direction.transformDirection(C),
+e.skeleton.boneMatrices&&void 0!==q.boneGlobalMatrices&&r.uniformMatrix4fv(q.boneGlobalMatrices,!1,e.skeleton.boneMatrices));if(m){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhysicalMaterial||d.lights){if(pa){var n=!0,s=0,t=0,x=0,v,H,E,D=ya,C=a.matrixWorldInverse;D.directional=
+[];D.point=[];D.spot=[];D.hemi=[];c=0;for(m=b.length;c<m;c++)if(p=b[c],v=p.color,H=p.intensity,E=p.distance,p instanceof THREE.AmbientLight)p.visible&&(s+=v.r,t+=v.g,x+=v.b);else if(p instanceof THREE.DirectionalLight){p.__webglUniforms||(p.__webglUniforms={direction:new THREE.Vector3,color:new THREE.Color});var y=p.__webglUniforms;D.directional.push(y);p.visible?(y.direction.setFromMatrixPosition(p.matrixWorld),W.setFromMatrixPosition(p.target.matrixWorld),y.direction.sub(W),y.direction.transformDirection(C),
 y.color.copy(p.color).multiplyScalar(p.intensity)):y.color.setRGB(0,0,0)}else p instanceof THREE.PointLight?(p.__webglUniforms||(p.__webglUniforms={position:new THREE.Vector3,color:new THREE.Color,distance:0,decay:0}),y=p.__webglUniforms,D.point.push(y),p.visible?(y.position.setFromMatrixPosition(p.matrixWorld),y.position.applyMatrix4(C),y.color.copy(p.color).multiplyScalar(p.intensity),y.distance=p.distance,y.decay=0===p.distance?0:p.decay):y.color.setRGB(0,0,0)):p instanceof THREE.SpotLight?(p.__webglUniforms||
-(p.__webglUniforms={position:new THREE.Vector3,direction:new THREE.Vector3,color:new THREE.Color,distance:0,decay:0,angleCos:0}),y=p.__webglUniforms,D.spot.push(y),p.visible?(y.position.setFromMatrixPosition(p.matrixWorld),y.position.applyMatrix4(C),y.color.copy(v).multiplyScalar(G),y.distance=E,y.direction.setFromMatrixPosition(p.matrixWorld),W.setFromMatrixPosition(p.target.matrixWorld),y.direction.sub(W),y.direction.transformDirection(C),y.angleCos=Math.cos(p.angle),y.exponent=p.exponent,y.decay=
-0===p.distance?0:p.decay):y.color.setRGB(0,0,0)):p instanceof THREE.HemisphereLight&&(p.__webglUniforms||(p.__webglUniforms={direction:new THREE.Vector3,skyColor:new THREE.Color,groundColor:new THREE.Color}),y=p.__webglUniforms,D.hemi.push(y),p.visible?(y.direction.setFromMatrixPosition(p.matrixWorld),y.direction.transformDirection(C),y.direction.normalize(),y.skyColor.copy(p.color).multiplyScalar(G),y.groundColor.copy(p.groundColor).multiplyScalar(G)):y.skyColor.setRGB(0,0,0));D.ambient[0]=s;D.ambient[1]=
+(p.__webglUniforms={position:new THREE.Vector3,direction:new THREE.Vector3,color:new THREE.Color,distance:0,decay:0,angleCos:0}),y=p.__webglUniforms,D.spot.push(y),p.visible?(y.position.setFromMatrixPosition(p.matrixWorld),y.position.applyMatrix4(C),y.color.copy(v).multiplyScalar(H),y.distance=E,y.direction.setFromMatrixPosition(p.matrixWorld),W.setFromMatrixPosition(p.target.matrixWorld),y.direction.sub(W),y.direction.transformDirection(C),y.angleCos=Math.cos(p.angle),y.exponent=p.exponent,y.decay=
+0===p.distance?0:p.decay):y.color.setRGB(0,0,0)):p instanceof THREE.HemisphereLight&&(p.__webglUniforms||(p.__webglUniforms={direction:new THREE.Vector3,skyColor:new THREE.Color,groundColor:new THREE.Color}),y=p.__webglUniforms,D.hemi.push(y),p.visible?(y.direction.setFromMatrixPosition(p.matrixWorld),y.direction.transformDirection(C),y.direction.normalize(),y.skyColor.copy(p.color).multiplyScalar(H),y.groundColor.copy(p.groundColor).multiplyScalar(H)):y.skyColor.setRGB(0,0,0));D.ambient[0]=s;D.ambient[1]=
 t;D.ambient[2]=x;pa=!1}n?(n=ya,k.ambientLightColor.value=n.ambient,k.directionalLights.value=n.directional,k.pointLights.value=n.point,k.spotLights.value=n.spot,k.hemisphereLights.value=n.hemi,u(k,!0)):u(k,!1)}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshPhysicalMaterial){k.opacity.value=d.opacity;k.diffuse.value=d.color;d.emissive&&(k.emissive.value=d.emissive);k.map.value=d.map;k.specularMap.value=d.specularMap;
 k.alphaMap.value=d.alphaMap;d.aoMap&&(k.aoMap.value=d.aoMap,k.aoMapIntensity.value=d.aoMapIntensity);var z;d.map?z=d.map:d.specularMap?z=d.specularMap:d.displacementMap?z=d.displacementMap:d.normalMap?z=d.normalMap:d.bumpMap?z=d.bumpMap:d.alphaMap?z=d.alphaMap:d.emissiveMap&&(z=d.emissiveMap);void 0!==z&&(z instanceof THREE.WebGLRenderTarget&&(z=z.texture),n=z.offset,z=z.repeat,k.offsetRepeat.value.set(n.x,n.y,z.x,z.y));k.envMap.value=d.envMap;k.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?
-1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio}d instanceof THREE.LineBasicMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.PointsMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size,k.scale.value=L.height/2,k.map.value=d.map,null!==
-d.map&&(a=d.map.offset,z=d.map.repeat,k.offsetRepeat.value.set(a.x,a.y,z.x,z.y))):d instanceof THREE.MeshPhongMaterial?(k.specular.value=d.specular,k.shininess.value=Math.max(d.shininess,1E-4),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&(k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&
+1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio}d instanceof THREE.LineBasicMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.PointsMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size*G,k.scale.value=L.height/2,k.map.value=d.map,
+null!==d.map&&(a=d.map.offset,z=d.map.repeat,k.offsetRepeat.value.set(a.x,a.y,z.x,z.y))):d instanceof THREE.MeshPhongMaterial?(k.specular.value=d.specular,k.shininess.value=Math.max(d.shininess,1E-4),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&(k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&
 (k.displacementMap.value=d.displacementMap,k.displacementScale.value=d.displacementScale,k.displacementBias.value=d.displacementBias)):d instanceof THREE.MeshPhysicalMaterial?(k.roughness.value=d.roughness,k.metalness.value=d.metalness,d.roughnessMap&&(k.roughnessMap.value=d.roughnessMap),d.reflectivityMap&&(k.reflectivityMap.value=d.reflectivityMap),d.metalnessMap&&(k.metalnessMap.value=d.metalnessMap),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&
 (k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&(k.displacementMap.value=d.displacementMap,k.displacementScale.value=d.displacementScale,k.displacementBias.value=d.displacementBias),d.envMap&&(k.envMapIntensity.value=d.envMapIntensity)):d instanceof THREE.MeshDepthMaterial?(k.mNear.value=a.near,k.mFar.value=a.far,k.opacity.value=d.opacity):
 d instanceof THREE.MeshNormalMaterial&&(k.opacity.value=d.opacity);if(xa.enabled&&e.receiveShadow&&!d._shadowPass&&k.shadowMatrix)for(a=d=0,z=b.length;a<z;a++)n=b[a],!0===n.castShadow&&(n instanceof THREE.PointLight||n instanceof THREE.SpotLight||n instanceof THREE.DirectionalLight)&&(c=n.shadow,n instanceof THREE.PointLight?(W.setFromMatrixPosition(n.matrixWorld).negate(),c.matrix.identity().setPosition(W),k.shadowDarkness.value[d]=-c.darkness):k.shadowDarkness.value[d]=c.darkness,k.shadowMatrix.value[d]=
 c.matrix,k.shadowMap.value[d]=c.map,k.shadowMapSize.value[d]=c.mapSize,k.shadowBias.value[d]=c.bias,d++);b=f.uniformsList;f=0;for(d=b.length;f<d;f++)if(a=b[f][0],!1!==a.needsUpdate)switch(k=a.type,n=a.value,z=b[f][1],k){case "1i":r.uniform1i(z,n);break;case "1f":r.uniform1f(z,n);break;case "2f":r.uniform2f(z,n[0],n[1]);break;case "3f":r.uniform3f(z,n[0],n[1],n[2]);break;case "4f":r.uniform4f(z,n[0],n[1],n[2],n[3]);break;case "1iv":r.uniform1iv(z,n);break;case "3iv":r.uniform3iv(z,n);break;case "1fv":r.uniform1fv(z,
-n);break;case "2fv":r.uniform2fv(z,n);break;case "3fv":r.uniform3fv(z,n);break;case "4fv":r.uniform4fv(z,n);break;case "Matrix3fv":r.uniformMatrix3fv(z,!1,n);break;case "Matrix4fv":r.uniformMatrix4fv(z,!1,n);break;case "i":r.uniform1i(z,n);break;case "f":r.uniform1f(z,n);break;case "v2":r.uniform2f(z,n.x,n.y);break;case "v3":r.uniform3f(z,n.x,n.y,n.z);break;case "v4":r.uniform4f(z,n.x,n.y,n.z,n.w);break;case "c":r.uniform3f(z,n.r,n.g,n.b);break;case "s":for(var I in a.properties)switch(c=a.properties[I],
-m=z[I],p=n[I],c.type){case "f":r.uniform1f(m,p);break;case "v2":r.uniform2f(m,p.x,p.y);break;case "v3":r.uniform3f(m,p.x,p.y,p.z);break;case "v4":r.uniform4f(m,p.x,p.y,p.z,p.w);break;case "c":r.uniform3f(m,p.r,p.g,p.b)}break;case "sa":for(k=0;k<n.length;k++)for(I in a.properties)switch(c=a.properties[I],m=z[k][I],p=n[k][I],c.type){case "f":r.uniform1f(m,p);break;case "v2":r.uniform2f(m,p.x,p.y);break;case "v3":r.uniform3f(m,p.x,p.y,p.z);break;case "v4":r.uniform4f(m,p.x,p.y,p.z,p.w);break;case "c":r.uniform3f(m,
+n);break;case "2fv":r.uniform2fv(z,n);break;case "3fv":r.uniform3fv(z,n);break;case "4fv":r.uniform4fv(z,n);break;case "Matrix3fv":r.uniformMatrix3fv(z,!1,n);break;case "Matrix4fv":r.uniformMatrix4fv(z,!1,n);break;case "i":r.uniform1i(z,n);break;case "f":r.uniform1f(z,n);break;case "v2":r.uniform2f(z,n.x,n.y);break;case "v3":r.uniform3f(z,n.x,n.y,n.z);break;case "v4":r.uniform4f(z,n.x,n.y,n.z,n.w);break;case "c":r.uniform3f(z,n.r,n.g,n.b);break;case "s":for(var J in a.properties)switch(c=a.properties[J],
+m=z[J],p=n[J],c.type){case "f":r.uniform1f(m,p);break;case "v2":r.uniform2f(m,p.x,p.y);break;case "v3":r.uniform3f(m,p.x,p.y,p.z);break;case "v4":r.uniform4f(m,p.x,p.y,p.z,p.w);break;case "c":r.uniform3f(m,p.r,p.g,p.b)}break;case "sa":for(k=0;k<n.length;k++)for(J in a.properties)switch(c=a.properties[J],m=z[k][J],p=n[k][J],c.type){case "f":r.uniform1f(m,p);break;case "v2":r.uniform2f(m,p.x,p.y);break;case "v3":r.uniform3f(m,p.x,p.y,p.z);break;case "v4":r.uniform4f(m,p.x,p.y,p.z,p.w);break;case "c":r.uniform3f(m,
 p.r,p.g,p.b)}break;case "iv1":r.uniform1iv(z,n);break;case "iv":r.uniform3iv(z,n);break;case "fv1":r.uniform1fv(z,n);break;case "fv":r.uniform3fv(z,n);break;case "v2v":void 0===a._array&&(a._array=new Float32Array(2*n.length));m=k=0;for(c=n.length;k<c;k++,m+=2)a._array[m+0]=n[k].x,a._array[m+1]=n[k].y;r.uniform2fv(z,a._array);break;case "v3v":void 0===a._array&&(a._array=new Float32Array(3*n.length));m=k=0;for(c=n.length;k<c;k++,m+=3)a._array[m+0]=n[k].x,a._array[m+1]=n[k].y,a._array[m+2]=n[k].z;
 r.uniform3fv(z,a._array);break;case "v4v":void 0===a._array&&(a._array=new Float32Array(4*n.length));m=k=0;for(c=n.length;k<c;k++,m+=4)a._array[m+0]=n[k].x,a._array[m+1]=n[k].y,a._array[m+2]=n[k].z,a._array[m+3]=n[k].w;r.uniform4fv(z,a._array);break;case "m3":r.uniformMatrix3fv(z,!1,n.elements);break;case "m3v":void 0===a._array&&(a._array=new Float32Array(9*n.length));k=0;for(c=n.length;k<c;k++)n[k].flattenToArrayOffset(a._array,9*k);r.uniformMatrix3fv(z,!1,a._array);break;case "m4":r.uniformMatrix4fv(z,
 !1,n.elements);break;case "m4v":void 0===a._array&&(a._array=new Float32Array(16*n.length));k=0;for(c=n.length;k<c;k++)n[k].flattenToArrayOffset(a._array,16*k);r.uniformMatrix4fv(z,!1,a._array);break;case "t":m=w();r.uniform1i(z,m);if(!n)continue;n instanceof THREE.CubeTexture||Array.isArray(n.image)&&6===n.image.length?A(n,m):n instanceof THREE.WebGLRenderTargetCube?B(n.texture,m):n instanceof THREE.WebGLRenderTarget?Y.setTexture(n.texture,m):Y.setTexture(n,m);break;case "tv":void 0===a._array&&
 (a._array=[]);k=0;for(c=a.value.length;k<c;k++)a._array[k]=w();r.uniform1iv(z,a._array);k=0;for(c=a.value.length;k<c;k++)n=a.value[k],m=a._array[k],n&&(n instanceof THREE.CubeTexture||n.image instanceof Array&&6===n.image.length?A(n,m):n instanceof THREE.WebGLRenderTarget?Y.setTexture(n.texture,m):n instanceof THREE.WebGLRenderTargetCube?B(n.texture,m):Y.setTexture(n,m));break;default:console.warn("THREE.WebGLRenderer: Unknown uniform type: "+k)}}r.uniformMatrix4fv(q.modelViewMatrix,!1,e.modelViewMatrix.elements);
 q.normalMatrix&&r.uniformMatrix3fv(q.normalMatrix,!1,e.normalMatrix.elements);void 0!==q.modelMatrix&&r.uniformMatrix4fv(q.modelMatrix,!1,e.matrixWorld.elements);return g}function u(a,b){a.ambientLightColor.needsUpdate=b;a.directionalLights.needsUpdate=b;a.pointLights.needsUpdate=b;a.spotLights.needsUpdate=b;a.hemisphereLights.needsUpdate=b}function w(){var a=ra;a>=Z.maxTextures&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+Z.maxTextures);ra+=1;return a}
 function E(a,b,c){c?(r.texParameteri(a,r.TEXTURE_WRAP_S,D(b.wrapS)),r.texParameteri(a,r.TEXTURE_WRAP_T,D(b.wrapT)),r.texParameteri(a,r.TEXTURE_MAG_FILTER,D(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,D(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,G(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,G(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=T.get("EXT_texture_filter_anisotropic"))||b.type===THREE.FloatType&&null===T.get("OES_texture_float_linear")||b.type===THREE.HalfFloatType&&null===T.get("OES_texture_half_float_linear")||
+b),r.texParameteri(a,r.TEXTURE_MAG_FILTER,H(b.magFilter)),r.texParameteri(a,r.TEXTURE_MIN_FILTER,H(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=T.get("EXT_texture_filter_anisotropic"))||b.type===THREE.FloatType&&null===T.get("OES_texture_float_linear")||b.type===THREE.HalfFloatType&&null===T.get("OES_texture_half_float_linear")||
 !(1<b.anisotropy||S.get(b).__currentAnisotropy)||(r.texParameterf(a,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,Y.getMaxAnisotropy())),S.get(b).__currentAnisotropy=b.anisotropy)}function x(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 C(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function A(a,b){var c=S.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(),ea.textures++);J.activeTexture(r.TEXTURE0+b);J.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]=!Y.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:x(a.image[h],Z.maxCubemapSize);var k=C(g[0]),l=D(a.format),n=D(a.type);E(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var m,p=g[h].mipmaps,q=0,s=p.length;q<s;q++)m=p[q],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<J.getCompressedTextureFormats().indexOf(l)?J.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,l,
-m.width,m.height,0,m.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):J.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,l,m.width,m.height,0,l,n,m.data);else e?J.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,l,g[h].width,g[h].height,0,l,n,g[h].data):J.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,l,l,n,g[h]);a.generateMipmaps&&k&&r.generateMipmap(r.TEXTURE_CUBE_MAP);c.__version=a.version;if(a.onUpdate)a.onUpdate(a)}else J.activeTexture(r.TEXTURE0+
-b),J.bindTexture(r.TEXTURE_CUBE_MAP,c.__image__webglTextureCube)}function B(a,b){J.activeTexture(r.TEXTURE0+b);J.bindTexture(r.TEXTURE_CUBE_MAP,S.get(a).__webglTexture)}function y(a,b,c){r.bindFramebuffer(r.FRAMEBUFFER,a);r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,c,S.get(b.texture).__webglTexture,0)}function H(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)}function G(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?r.NEAREST:r.LINEAR}function D(a){var b;if(a===THREE.RepeatWrapping)return r.REPEAT;if(a===THREE.ClampToEdgeWrapping)return r.CLAMP_TO_EDGE;
+"). Resized to "+d.width+"x"+d.height,a);return d}return a}function C(a){return THREE.Math.isPowerOfTwo(a.width)&&THREE.Math.isPowerOfTwo(a.height)}function A(a,b){var c=S.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(),ea.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]=!Y.autoScaleCubemaps||d||e?e?a.image[h].image:a.image[h]:x(a.image[h],Z.maxCubemapSize);var k=C(g[0]),l=D(a.format),n=D(a.type);E(r.TEXTURE_CUBE_MAP,a,k);for(h=0;6>h;h++)if(d)for(var m,p=g[h].mipmaps,q=0,s=p.length;q<s;q++)m=p[q],a.format!==THREE.RGBAFormat&&a.format!==THREE.RGBFormat?-1<K.getCompressedTextureFormats().indexOf(l)?K.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,l,
+m.width,m.height,0,m.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,q,l,m.width,m.height,0,l,n,m.data);else e?K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,l,g[h].width,g[h].height,0,l,n,g[h].data):K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+h,0,l,l,n,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 B(a,b){K.activeTexture(r.TEXTURE0+b);K.bindTexture(r.TEXTURE_CUBE_MAP,S.get(a).__webglTexture)}function y(a,b,c){r.bindFramebuffer(r.FRAMEBUFFER,a);r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,c,S.get(b.texture).__webglTexture,0)}function I(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)}function H(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?r.NEAREST:r.LINEAR}function D(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=T.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=T.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=T.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=T.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 L=void 0!==a.canvas?a.canvas:document.createElement("canvas"),M=void 0!==a.context?a.context:null,N=L.width,K=L.height,z=1,I=void 0!==a.alpha?a.alpha:!1,O=void 0!==a.depth?a.depth:!0,R=void 0!==a.stencil?a.stencil:!0,P=void 0!==
+if(a===THREE.RGBA_PVRTC_2BPPV1_Format)return b.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}b=T.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 L=void 0!==a.canvas?a.canvas:document.createElement("canvas"),M=void 0!==a.context?a.context:null,N=L.width,J=L.height,G=1,z=void 0!==a.alpha?a.alpha:!1,O=void 0!==a.depth?a.depth:!0,R=void 0!==a.stencil?a.stencil:!0,P=void 0!==
 a.antialias?a.antialias:!1,Q=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,F=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:!1,U=new THREE.Color(0),V=0,X=[],aa=[],ca=-1,ba=[],fa=-1,$=new Float32Array(8),va=[],wa=[];this.domElement=L;this.context=null;this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.gammaFactor=2;this.gammaOutput=this.gammaInput=!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;var Y=this,
 ta=null,sa=null,ma=-1,la="",ka=null,ra=0,ga=0,ha=0,ia=L.width,ja=L.height,za=0,Aa=0,ua=new THREE.Frustum,qa=new THREE.Matrix4,W=new THREE.Vector3;new THREE.Vector3;var pa=!0,ya={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[],decays:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[],decays:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},ea={geometries:0,textures:0},da={calls:0,
-vertices:0,faces:0,points:0};this.info={render:da,memory:ea,programs:null};var r;try{I={alpha:I,depth:O,stencil:R,antialias:P,premultipliedAlpha:Q,preserveDrawingBuffer:F};r=M||L.getContext("webgl",I)||L.getContext("experimental-webgl",I);if(null===r){if(null!==L.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}L.addEventListener("webglcontextlost",e,!1)}catch(Ba){console.error("THREE.WebGLRenderer: "+Ba)}var T=new THREE.WebGLExtensions(r);
-T.get("OES_texture_float");T.get("OES_texture_float_linear");T.get("OES_texture_half_float");T.get("OES_texture_half_float_linear");T.get("OES_standard_derivatives");T.get("ANGLE_instanced_arrays");T.get("OES_element_index_uint")&&(THREE.BufferGeometry.MaxIndex=4294967296);var Z=new THREE.WebGLCapabilities(r,T,a),J=new THREE.WebGLState(r,T,D),S=new THREE.WebGLProperties,oa=new THREE.WebGLObjects(r,S,this.info),na=new THREE.WebGLPrograms(this,Z);this.info.programs=na.programs;var Ca=new THREE.WebGLBufferRenderer(r,
-T,da),Da=new THREE.WebGLIndexedBufferRenderer(r,T,da);c();this.context=r;this.capabilities=Z;this.extensions=T;this.state=J;var xa=new THREE.WebGLShadowMap(this,X,oa);this.shadowMap=xa;var Ea=new THREE.SpritePlugin(this,va),Fa=new THREE.LensFlarePlugin(this,wa);this.getContext=function(){return r};this.getContextAttributes=function(){return r.getContextAttributes()};this.forceContextLoss=function(){T.get("WEBGL_lose_context").loseContext()};this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==
-a)return a;var b=T.get("EXT_texture_filter_anisotropic");return a=null!==b?r.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}();this.getPrecision=function(){return Z.precision};this.getPixelRatio=function(){return z};this.setPixelRatio=function(a){void 0!==a&&(z=a)};this.getSize=function(){return{width:N,height:K}};this.setSize=function(a,b,c){N=a;K=b;L.width=a*z;L.height=b*z;!1!==c&&(L.style.width=a+"px",L.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){ga=a*
-z;ha=b*z;ia=c*z;ja=d*z;r.viewport(ga,ha,ia,ja)};this.getViewport=function(a){a.x=ga/z;a.y=ha/z;a.z=ia/z;a.w=ja/z};this.setScissor=function(a,b,c,d){r.scissor(a*z,b*z,c*z,d*z)};this.enableScissorTest=function(a){J.setScissorTest(a)};this.getClearColor=function(){return U};this.setClearColor=function(a,c){U.set(a);V=void 0!==c?c:1;b(U.r,U.g,U.b,V)};this.getClearAlpha=function(){return V};this.setClearAlpha=function(a){V=a;b(U.r,U.g,U.b,V)};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(){r.clear(r.COLOR_BUFFER_BIT)};this.clearDepth=function(){r.clear(r.DEPTH_BUFFER_BIT)};this.clearStencil=function(){r.clear(r.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.resetGLState=d;this.dispose=function(){L.removeEventListener("webglcontextlost",e,!1)};this.renderBufferImmediate=function(a,b,c){J.initAttributes();var d=
-S.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),J.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&&"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,l=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=l;g[e+3]=h;g[e+4]=k;g[e+5]=l;g[e+6]=h;g[e+7]=k;g[e+8]=l}r.bufferData(r.ARRAY_BUFFER,a.normalArray,r.DYNAMIC_DRAW);J.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),J.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),J.enableAttribute(b.color),r.vertexAttribPointer(b.color,3,r.FLOAT,!1,0,0));J.disableUnusedAttributes();r.drawArrays(r.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f,g){t(e);var h=v(a,b,c,e,f),l=!1;a=d.id+"_"+h.id+"_"+e.wireframe;a!==
+vertices:0,faces:0,points:0};this.info={render:da,memory:ea,programs:null};var r;try{z={alpha:z,depth:O,stencil:R,antialias:P,premultipliedAlpha:Q,preserveDrawingBuffer:F};r=M||L.getContext("webgl",z)||L.getContext("experimental-webgl",z);if(null===r){if(null!==L.getContext("webgl"))throw"Error creating WebGL context with your selected attributes.";throw"Error creating WebGL context.";}L.addEventListener("webglcontextlost",e,!1)}catch(Ba){console.error("THREE.WebGLRenderer: "+Ba)}var T=new THREE.WebGLExtensions(r);
+T.get("OES_texture_float");T.get("OES_texture_float_linear");T.get("OES_texture_half_float");T.get("OES_texture_half_float_linear");T.get("OES_standard_derivatives");T.get("ANGLE_instanced_arrays");T.get("OES_element_index_uint")&&(THREE.BufferGeometry.MaxIndex=4294967296);var Z=new THREE.WebGLCapabilities(r,T,a),K=new THREE.WebGLState(r,T,D),S=new THREE.WebGLProperties,oa=new THREE.WebGLObjects(r,S,this.info),na=new THREE.WebGLPrograms(this,Z);this.info.programs=na.programs;var Ca=new THREE.WebGLBufferRenderer(r,
+T,da),Da=new THREE.WebGLIndexedBufferRenderer(r,T,da);c();this.context=r;this.capabilities=Z;this.extensions=T;this.state=K;var xa=new THREE.WebGLShadowMap(this,X,oa);this.shadowMap=xa;var Ea=new THREE.SpritePlugin(this,va),Fa=new THREE.LensFlarePlugin(this,wa);this.getContext=function(){return r};this.getContextAttributes=function(){return r.getContextAttributes()};this.forceContextLoss=function(){T.get("WEBGL_lose_context").loseContext()};this.getMaxAnisotropy=function(){var a;return function(){if(void 0!==
+a)return a;var b=T.get("EXT_texture_filter_anisotropic");return a=null!==b?r.getParameter(b.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}}();this.getPrecision=function(){return Z.precision};this.getPixelRatio=function(){return G};this.setPixelRatio=function(a){void 0!==a&&(G=a)};this.getSize=function(){return{width:N,height:J}};this.setSize=function(a,b,c){N=a;J=b;L.width=a*G;L.height=b*G;!1!==c&&(L.style.width=a+"px",L.style.height=b+"px");this.setViewport(0,0,a,b)};this.setViewport=function(a,b,c,d){ga=a*
+G;ha=b*G;ia=c*G;ja=d*G;r.viewport(ga,ha,ia,ja)};this.getViewport=function(a){a.x=ga/G;a.y=ha/G;a.z=ia/G;a.w=ja/G};this.setScissor=function(a,b,c,d){r.scissor(a*G,b*G,c*G,d*G)};this.enableScissorTest=function(a){K.setScissorTest(a)};this.getClearColor=function(){return U};this.setClearColor=function(a,c){U.set(a);V=void 0!==c?c:1;b(U.r,U.g,U.b,V)};this.getClearAlpha=function(){return V};this.setClearAlpha=function(a){V=a;b(U.r,U.g,U.b,V)};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(){r.clear(r.COLOR_BUFFER_BIT)};this.clearDepth=function(){r.clear(r.DEPTH_BUFFER_BIT)};this.clearStencil=function(){r.clear(r.STENCIL_BUFFER_BIT)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.resetGLState=d;this.dispose=function(){L.removeEventListener("webglcontextlost",e,!1)};this.renderBufferImmediate=function(a,b,c){K.initAttributes();var d=
+S.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&&"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,l=(g[e+2]+g[e+5]+g[e+8])/3;g[e+0]=h;g[e+1]=k;g[e+2]=l;g[e+3]=h;g[e+4]=k;g[e+5]=l;g[e+6]=h;g[e+7]=k;g[e+8]=l}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,g){t(e);var h=v(a,b,c,e,f),l=!1;a=d.id+"_"+h.id+"_"+e.wireframe;a!==
 la&&(la=a,l=!0);b=f.morphTargetInfluences;if(void 0!==b){a=[];c=0;for(l=b.length;c<l;c++){var n=b[c];a.push([n,c])}a.sort(k);8<a.length&&(a.length=8);var m=d.morphAttributes;c=0;for(l=a.length;c<l;c++)n=a[c],$[c]=n[0],0!==n[0]?(b=n[1],!0===e.morphTargets&&m.position&&d.addAttribute("morphTarget"+c,m.position[b]),!0===e.morphNormals&&m.normal&&d.addAttribute("morphNormal"+c,m.normal[b])):(!0===e.morphTargets&&d.removeAttribute("morphTarget"+c),!0===e.morphNormals&&d.removeAttribute("morphNormal"+c));
 a=h.getUniforms();null!==a.morphTargetInfluences&&r.uniform1fv(a.morphTargetInfluences,$);l=!0}b=d.index;c=d.attributes.position;!0===e.wireframe&&(b=oa.getWireframeAttribute(d));null!==b?(a=Da,a.setIndex(b)):a=Ca;if(l){a:{var l=void 0,p;if(d instanceof THREE.InstancedBufferGeometry&&(p=T.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===
-l&&(l=0);J.initAttributes();var n=d.attributes,h=h.getAttributes(),m=e.defaultAttributeValues,q;for(q in h){var s=h[q];if(0<=s){var u=n[q];if(void 0!==u){var w=u.itemSize,x=oa.getAttributeBuffer(u);if(u instanceof THREE.InterleavedBufferAttribute){var G=u.data,D=G.stride,u=u.offset;G instanceof THREE.InstancedInterleavedBuffer?(J.enableAttributeAndDivisor(s,G.meshPerAttribute,p),void 0===d.maxInstancedCount&&(d.maxInstancedCount=G.meshPerAttribute*G.count)):J.enableAttribute(s);r.bindBuffer(r.ARRAY_BUFFER,
-x);r.vertexAttribPointer(s,w,r.FLOAT,!1,D*G.array.BYTES_PER_ELEMENT,(l*D+u)*G.array.BYTES_PER_ELEMENT)}else u instanceof THREE.InstancedBufferAttribute?(J.enableAttributeAndDivisor(s,u.meshPerAttribute,p),void 0===d.maxInstancedCount&&(d.maxInstancedCount=u.meshPerAttribute*u.count)):J.enableAttribute(s),r.bindBuffer(r.ARRAY_BUFFER,x),r.vertexAttribPointer(s,w,r.FLOAT,!1,0,l*w*4)}else if(void 0!==m&&(w=m[q],void 0!==w))switch(w.length){case 2:r.vertexAttrib2fv(s,w);break;case 3:r.vertexAttrib3fv(s,
-w);break;case 4:r.vertexAttrib4fv(s,w);break;default:r.vertexAttrib1fv(s,w)}}}J.disableUnusedAttributes()}null!==b&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,oa.getAttributeBuffer(b))}p=Infinity;null!==b?p=b.count:void 0!==c&&(p=c.count);q=d.drawRange.start;b=d.drawRange.count;c=null!==g?g.start:0;l=null!==g?g.count:Infinity;g=Math.max(0,q,c);p=Math.min(0+p,q+b,c+l)-1;p=Math.max(0,p-g+1);f instanceof THREE.Mesh?(!0===e.wireframe?(J.setLineWidth(e.wireframeLinewidth*z),a.setMode(r.LINES)):a.setMode(r.TRIANGLES),
-d instanceof THREE.InstancedBufferGeometry&&0<d.maxInstancedCount?a.renderInstances(d):a.render(g,p)):f instanceof THREE.Line?(d=e.linewidth,void 0===d&&(d=1),J.setLineWidth(d*z),f instanceof THREE.LineSegments?a.setMode(r.LINES):a.setMode(r.LINE_STRIP),a.render(g,p)):f instanceof THREE.Points&&(a.setMode(r.POINTS),a.render(g,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;
+l&&(l=0);K.initAttributes();var n=d.attributes,h=h.getAttributes(),m=e.defaultAttributeValues,q;for(q in h){var s=h[q];if(0<=s){var u=n[q];if(void 0!==u){var w=u.itemSize,x=oa.getAttributeBuffer(u);if(u instanceof THREE.InterleavedBufferAttribute){var H=u.data,D=H.stride,u=u.offset;H instanceof THREE.InstancedInterleavedBuffer?(K.enableAttributeAndDivisor(s,H.meshPerAttribute,p),void 0===d.maxInstancedCount&&(d.maxInstancedCount=H.meshPerAttribute*H.count)):K.enableAttribute(s);r.bindBuffer(r.ARRAY_BUFFER,
+x);r.vertexAttribPointer(s,w,r.FLOAT,!1,D*H.array.BYTES_PER_ELEMENT,(l*D+u)*H.array.BYTES_PER_ELEMENT)}else u instanceof THREE.InstancedBufferAttribute?(K.enableAttributeAndDivisor(s,u.meshPerAttribute,p),void 0===d.maxInstancedCount&&(d.maxInstancedCount=u.meshPerAttribute*u.count)):K.enableAttribute(s),r.bindBuffer(r.ARRAY_BUFFER,x),r.vertexAttribPointer(s,w,r.FLOAT,!1,0,l*w*4)}else if(void 0!==m&&(w=m[q],void 0!==w))switch(w.length){case 2:r.vertexAttrib2fv(s,w);break;case 3:r.vertexAttrib3fv(s,
+w);break;case 4:r.vertexAttrib4fv(s,w);break;default:r.vertexAttrib1fv(s,w)}}}K.disableUnusedAttributes()}null!==b&&r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,oa.getAttributeBuffer(b))}p=Infinity;null!==b?p=b.count:void 0!==c&&(p=c.count);q=d.drawRange.start;b=d.drawRange.count;c=null!==g?g.start:0;l=null!==g?g.count:Infinity;g=Math.max(0,q,c);p=Math.min(0+p,q+b,c+l)-1;p=Math.max(0,p-g+1);f instanceof THREE.Mesh?(!0===e.wireframe?(K.setLineWidth(e.wireframeLinewidth*G),a.setMode(r.LINES)):a.setMode(r.TRIANGLES),
+d instanceof THREE.InstancedBufferGeometry&&0<d.maxInstancedCount?a.renderInstances(d):a.render(g,p)):f instanceof THREE.Line?(d=e.linewidth,void 0===d&&(d=1),K.setLineWidth(d*G),f instanceof THREE.LineSegments?a.setMode(r.LINES):a.setMode(r.LINE_STRIP),a.render(g,p)):f instanceof THREE.Points&&(a.setMode(r.POINTS),a.render(g,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;
 la="";ma=-1;ka=null;pa=!0;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();b.matrixWorldInverse.getInverse(b.matrixWorld);qa.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);ua.setFromMatrix(qa);X.length=0;fa=ca=-1;va.length=0;wa.length=0;p(a,b);aa.length=ca+1;ba.length=fa+1;!0===Y.sortObjects&&(aa.sort(m),ba.sort(q));xa.render(a,b);da.calls=0;da.vertices=0;da.faces=0;da.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,
-this.autoClearStencil);a.overrideMaterial?(d=a.overrideMaterial,s(aa,b,X,e,d),s(ba,b,X,e,d)):(J.setBlending(THREE.NoBlending),s(aa,b,X,e),s(ba,b,X,e));Ea.render(a,b);Fa.render(a,b,za,Aa);c&&(a=c.texture,b=C(c),a.generateMipmaps&&b&&a.minFilter!==THREE.NearestFilter&&a.minFilter!==THREE.LinearFilter&&(a=c instanceof THREE.WebGLRenderTargetCube?r.TEXTURE_CUBE_MAP:r.TEXTURE_2D,c=S.get(c.texture).__webglTexture,J.bindTexture(a,c),r.generateMipmap(a),J.bindTexture(a,null)));J.setDepthTest(!0);J.setDepthWrite(!0);
-J.setColorWrite(!0)}};this.setFaceCulling=function(a,b){a===THREE.CullFaceNone?J.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),J.enable(r.CULL_FACE))};this.setTexture=function(a,b){var c=S.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(),ea.textures++);J.activeTexture(r.TEXTURE0+b);J.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);a.image=x(a.image,
+this.autoClearStencil);a.overrideMaterial?(d=a.overrideMaterial,s(aa,b,X,e,d),s(ba,b,X,e,d)):(K.setBlending(THREE.NoBlending),s(aa,b,X,e),s(ba,b,X,e));Ea.render(a,b);Fa.render(a,b,za,Aa);c&&(a=c.texture,b=C(c),a.generateMipmaps&&b&&a.minFilter!==THREE.NearestFilter&&a.minFilter!==THREE.LinearFilter&&(a=c instanceof THREE.WebGLRenderTargetCube?r.TEXTURE_CUBE_MAP:r.TEXTURE_2D,c=S.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=S.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(),ea.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);a.image=x(a.image,
 Z.maxTextureSize);if((a.wrapS!==THREE.ClampToEdgeWrapping||a.wrapT!==THREE.ClampToEdgeWrapping||a.minFilter!==THREE.NearestFilter&&a.minFilter!==THREE.LinearFilter)&&!1===C(a.image)){d=a.image;if(d instanceof HTMLImageElement||d instanceof HTMLCanvasElement){var e=document.createElement("canvas");e.width=THREE.Math.nearestPowerOfTwo(d.width);e.height=THREE.Math.nearestPowerOfTwo(d.height);e.getContext("2d").drawImage(d,0,0,e.width,e.height);console.warn("THREE.WebGLRenderer: image is not power of two ("+
-d.width+"x"+d.height+"). Resized to "+e.width+"x"+e.height,d);d=e}a.image=d}var g=a.image,d=C(g),e=D(a.format),h=D(a.type);E(r.TEXTURE_2D,a,d);var k=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<k.length&&d){for(var l=0,n=k.length;l<n;l++)g=k[l],J.texImage2D(r.TEXTURE_2D,l,e,g.width,g.height,0,e,h,g.data);a.generateMipmaps=!1}else J.texImage2D(r.TEXTURE_2D,0,e,g.width,g.height,0,e,h,g.data);else if(a instanceof THREE.CompressedTexture)for(l=0,n=k.length;l<n;l++)g=k[l],a.format!==THREE.RGBAFormat&&
-a.format!==THREE.RGBFormat?-1<J.getCompressedTextureFormats().indexOf(e)?J.compressedTexImage2D(r.TEXTURE_2D,l,e,g.width,g.height,0,g.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):J.texImage2D(r.TEXTURE_2D,l,e,g.width,g.height,0,e,h,g.data);else if(0<k.length&&d){l=0;for(n=k.length;l<n;l++)g=k[l],J.texImage2D(r.TEXTURE_2D,l,e,e,h,g);a.generateMipmaps=!1}else J.texImage2D(r.TEXTURE_2D,0,e,e,h,a.image);a.generateMipmaps&&d&&r.generateMipmap(r.TEXTURE_2D);
-c.__version=a.version;if(a.onUpdate)a.onUpdate(a)}}else J.activeTexture(r.TEXTURE0+b),J.bindTexture(r.TEXTURE_2D,c.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&void 0===S.get(a).__webglFramebuffer){var c=S.get(a),d=S.get(a.texture);void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",g);d.__webglTexture=r.createTexture();ea.textures++;var e=C(a),f=D(a.texture.format),h=D(a.texture.type);
-if(b){c.__webglFramebuffer=[];c.__webglRenderbuffer=[];J.bindTexture(r.TEXTURE_CUBE_MAP,d.__webglTexture);E(r.TEXTURE_CUBE_MAP,a.texture,e);for(d=0;6>d;d++)c.__webglFramebuffer[d]=r.createFramebuffer(),c.__webglRenderbuffer[d]=r.createRenderbuffer(),J.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+d,0,f,a.width,a.height,0,f,h,null),y(c.__webglFramebuffer[d],a,r.TEXTURE_CUBE_MAP_POSITIVE_X+d),H(c.__webglRenderbuffer[d],a);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP)}else c.__webglFramebuffer=
-r.createFramebuffer(),c.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:r.createRenderbuffer(),J.bindTexture(r.TEXTURE_2D,d.__webglTexture),E(r.TEXTURE_2D,a.texture,e),J.texImage2D(r.TEXTURE_2D,0,f,a.width,a.height,0,f,h,null),y(c.__webglFramebuffer,a,r.TEXTURE_2D),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,c.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&r.framebufferRenderbuffer(r.FRAMEBUFFER,
-r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,c.__webglRenderbuffer):H(c.__webglRenderbuffer,a),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D);b?J.bindTexture(r.TEXTURE_CUBE_MAP,null):J.bindTexture(r.TEXTURE_2D,null);r.bindRenderbuffer(r.RENDERBUFFER,null);r.bindFramebuffer(r.FRAMEBUFFER,null)}a?(c=S.get(a),d=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,c=a.width,e=a.height,h=f=0):(d=null,c=ia,e=ja,f=ga,h=ha);d!==sa&&(r.bindFramebuffer(r.FRAMEBUFFER,d),r.viewport(f,h,c,
+d.width+"x"+d.height+"). Resized to "+e.width+"x"+e.height,d);d=e}a.image=d}var g=a.image,d=C(g),e=D(a.format),h=D(a.type);E(r.TEXTURE_2D,a,d);var k=a.mipmaps;if(a instanceof THREE.DataTexture)if(0<k.length&&d){for(var l=0,n=k.length;l<n;l++)g=k[l],K.texImage2D(r.TEXTURE_2D,l,e,g.width,g.height,0,e,h,g.data);a.generateMipmaps=!1}else K.texImage2D(r.TEXTURE_2D,0,e,g.width,g.height,0,e,h,g.data);else if(a instanceof THREE.CompressedTexture)for(l=0,n=k.length;l<n;l++)g=k[l],a.format!==THREE.RGBAFormat&&
+a.format!==THREE.RGBFormat?-1<K.getCompressedTextureFormats().indexOf(e)?K.compressedTexImage2D(r.TEXTURE_2D,l,e,g.width,g.height,0,g.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):K.texImage2D(r.TEXTURE_2D,l,e,g.width,g.height,0,e,h,g.data);else if(0<k.length&&d){l=0;for(n=k.length;l<n;l++)g=k[l],K.texImage2D(r.TEXTURE_2D,l,e,e,h,g);a.generateMipmaps=!1}else K.texImage2D(r.TEXTURE_2D,0,e,e,h,a.image);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.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&void 0===S.get(a).__webglFramebuffer){var c=S.get(a),d=S.get(a.texture);void 0===a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.addEventListener("dispose",g);d.__webglTexture=r.createTexture();ea.textures++;var e=C(a),f=D(a.texture.format),h=D(a.texture.type);
+if(b){c.__webglFramebuffer=[];c.__webglRenderbuffer=[];K.bindTexture(r.TEXTURE_CUBE_MAP,d.__webglTexture);E(r.TEXTURE_CUBE_MAP,a.texture,e);for(d=0;6>d;d++)c.__webglFramebuffer[d]=r.createFramebuffer(),c.__webglRenderbuffer[d]=r.createRenderbuffer(),K.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+d,0,f,a.width,a.height,0,f,h,null),y(c.__webglFramebuffer[d],a,r.TEXTURE_CUBE_MAP_POSITIVE_X+d),I(c.__webglRenderbuffer[d],a);a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_CUBE_MAP)}else c.__webglFramebuffer=
+r.createFramebuffer(),c.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:r.createRenderbuffer(),K.bindTexture(r.TEXTURE_2D,d.__webglTexture),E(r.TEXTURE_2D,a.texture,e),K.texImage2D(r.TEXTURE_2D,0,f,a.width,a.height,0,f,h,null),y(c.__webglFramebuffer,a,r.TEXTURE_2D),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,c.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&r.framebufferRenderbuffer(r.FRAMEBUFFER,
+r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,c.__webglRenderbuffer):I(c.__webglRenderbuffer,a),a.texture.generateMipmaps&&e&&r.generateMipmap(r.TEXTURE_2D);b?K.bindTexture(r.TEXTURE_CUBE_MAP,null):K.bindTexture(r.TEXTURE_2D,null);r.bindRenderbuffer(r.RENDERBUFFER,null);r.bindFramebuffer(r.FRAMEBUFFER,null)}a?(c=S.get(a),d=b?c.__webglFramebuffer[a.activeCubeFace]:c.__webglFramebuffer,c=a.width,e=a.height,h=f=0):(d=null,c=ia,e=ja,f=ga,h=ha);d!==sa&&(r.bindFramebuffer(r.FRAMEBUFFER,d),r.viewport(f,h,c,
 e),sa=d);b&&(d=S.get(a.texture),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+a.activeCubeFace,d.__webglTexture,0));za=c;Aa=e};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=S.get(a).__webglFramebuffer;if(g){var h=!1;g!==sa&&(r.bindFramebuffer(r.FRAMEBUFFER,g),h=!0);try{var l=a.texture;l.format!==
 THREE.RGBAFormat&&D(l.format)!==r.getParameter(r.IMPLEMENTATION_COLOR_READ_FORMAT)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):l.type===THREE.UnsignedByteType||D(l.type)===r.getParameter(r.IMPLEMENTATION_COLOR_READ_TYPE)||l.type===THREE.FloatType&&T.get("WEBGL_color_buffer_float")||l.type===THREE.HalfFloatType&&T.get("EXT_color_buffer_half_float")?r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE?r.readPixels(b,
 c,d,e,D(l.format),D(l.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,sa)}}}}};
@@ -710,37 +710,37 @@ THREE.WebGLShader=function(){function a(a){a=a.split("\n");for(var c=0;c<a.lengt
 THREE.WebGLShadowMap=function(a,b,c){function d(a,b,c,d){var e=a.geometry,f=null,f=n,g=a.customDepthMaterial;c&&(f=p,g=a.customDistanceMaterial);g?f=g:(a=a instanceof THREE.SkinnedMesh&&b.skinning,g=0,void 0!==e.morphTargets&&0<e.morphTargets.length&&b.morphTargets&&(g|=1),a&&(g|=2),f=f[g]);f.visible=b.visible;f.wireframe=b.wireframe;f.wireframeLinewidth=b.wireframeLinewidth;c&&void 0!==f.uniforms.lightPos&&f.uniforms.lightPos.value.copy(d);return f}function e(a,b,c){if(!1!==a.visible){a.layers.test(b.layers)&&
 (a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)&&a.castShadow&&(!1===a.frustumCulled||!0===h.intersectsObject(a))&&!0===a.material.visible&&(a.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,a.matrixWorld),q.push(a));a=a.children;for(var d=0,f=a.length;d<f;d++)e(a[d],b,c)}}var f=a.context,g=a.state,h=new THREE.Frustum,l=new THREE.Matrix4;new THREE.Vector3;new THREE.Vector3;for(var k=new THREE.Vector3,m=new THREE.Vector3,q=[],n=Array(4),p=Array(4),s=[new THREE.Vector3(1,
 0,0),new THREE.Vector3(-1,0,0),new THREE.Vector3(0,0,1),new THREE.Vector3(0,0,-1),new THREE.Vector3(0,1,0),new THREE.Vector3(0,-1,0)],t=[new THREE.Vector3(0,1,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,1,0),new THREE.Vector3(0,0,1),new THREE.Vector3(0,0,-1)],v=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4],u=new THREE.Vector4,w=THREE.ShaderLib.depthRGBA,E=THREE.UniformsUtils.clone(w.uniforms),x=THREE.ShaderLib.distanceRGBA,
-C=THREE.UniformsUtils.clone(x.uniforms),A=0;4!==A;++A){var B=0!==(A&1),y=0!==(A&2),H=new THREE.ShaderMaterial({uniforms:E,vertexShader:w.vertexShader,fragmentShader:w.fragmentShader,morphTargets:B,skinning:y});H._shadowPass=!0;n[A]=H;B=new THREE.ShaderMaterial({uniforms:C,vertexShader:x.vertexShader,fragmentShader:x.fragmentShader,morphTargets:B,skinning:y});B._shadowPass=!0;p[A]=B}var G=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=THREE.PCFShadowMap;this.cullFace=THREE.CullFaceFront;
-this.render=function(n,p){var w,x;if(!1!==G.enabled&&(!1!==G.autoUpdate||!1!==G.needsUpdate)){f.clearColor(1,1,1,1);g.disable(f.BLEND);g.enable(f.CULL_FACE);f.frontFace(f.CCW);f.cullFace(G.cullFace===THREE.CullFaceFront?f.FRONT:f.BACK);g.setDepthTest(!0);a.getViewport(u);for(var E=0,z=b.length;E<z;E++){var y=b[E];if(!0===y.castShadow){var B=y.shadow,A=B.camera,C=B.mapSize;if(y instanceof THREE.PointLight){w=6;x=!0;var H=C.x/4,F=C.y/2;v[0].set(2*H,F,H,F);v[1].set(0,F,H,F);v[2].set(3*H,F,H,F);v[3].set(H,
-F,H,F);v[4].set(3*H,0,H,F);v[5].set(H,0,H,F)}else w=1,x=!1;null===B.map&&(H=THREE.LinearFilter,G.type===THREE.PCFSoftShadowMap&&(H=THREE.NearestFilter),B.map=new THREE.WebGLRenderTarget(C.x,C.y,{minFilter:H,magFilter:H,format:THREE.RGBAFormat}),B.matrix=new THREE.Matrix4,y instanceof THREE.SpotLight&&(A.aspect=C.x/C.y),A.updateProjectionMatrix());C=B.map;B=B.matrix;m.setFromMatrixPosition(y.matrixWorld);A.position.copy(m);a.setRenderTarget(C);a.clear();for(C=0;C<w;C++)for(x?(k.copy(A.position),k.add(s[C]),
-A.up.copy(t[C]),A.lookAt(k),H=v[C],a.setViewport(H.x,H.y,H.z,H.w)):(k.setFromMatrixPosition(y.target.matrixWorld),A.lookAt(k)),A.updateMatrixWorld(),A.matrixWorldInverse.getInverse(A.matrixWorld),B.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),B.multiply(A.projectionMatrix),B.multiply(A.matrixWorldInverse),l.multiplyMatrices(A.projectionMatrix,A.matrixWorldInverse),h.setFromMatrix(l),q.length=0,e(n,p,A),H=0,F=q.length;H<F;H++){var U=q[H],V=c.update(U),X=U.material;if(X instanceof THREE.MeshFaceMaterial)for(var aa=
-V.groups,X=X.materials,ca=0,ba=aa.length;ca<ba;ca++){var fa=aa[ca],$=X[fa.materialIndex];!0===$.visible&&($=d(U,$,x,m),a.renderBufferDirect(A,b,null,V,$,U,fa))}else $=d(U,X,x,m),a.renderBufferDirect(A,b,null,V,$,U,null)}a.resetGLState()}}a.setViewport(u.x,u.y,u.z,u.w);w=a.getClearColor();x=a.getClearAlpha();a.setClearColor(w,x);g.enable(f.BLEND);G.cullFace===THREE.CullFaceFront&&f.cullFace(f.BACK);a.resetGLState();G.needsUpdate=!1}}};
-THREE.WebGLState=function(a,b,c){var d=this,e=new Uint8Array(16),f=new Uint8Array(16),g=new Uint8Array(16),h={},l=null,k=null,m=null,q=null,n=null,p=null,s=null,t=null,v=null,u=null,w=null,E=null,x=null,C=null,A=null,B=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),y=void 0,H={};this.init=function(){a.clearColor(0,0,0,1);a.clearDepth(1);a.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);
+C=THREE.UniformsUtils.clone(x.uniforms),A=0;4!==A;++A){var B=0!==(A&1),y=0!==(A&2),I=new THREE.ShaderMaterial({uniforms:E,vertexShader:w.vertexShader,fragmentShader:w.fragmentShader,morphTargets:B,skinning:y});I._shadowPass=!0;n[A]=I;B=new THREE.ShaderMaterial({uniforms:C,vertexShader:x.vertexShader,fragmentShader:x.fragmentShader,morphTargets:B,skinning:y});B._shadowPass=!0;p[A]=B}var H=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=THREE.PCFShadowMap;this.cullFace=THREE.CullFaceFront;
+this.render=function(n,p){var w,x;if(!1!==H.enabled&&(!1!==H.autoUpdate||!1!==H.needsUpdate)){f.clearColor(1,1,1,1);g.disable(f.BLEND);g.enable(f.CULL_FACE);f.frontFace(f.CCW);f.cullFace(H.cullFace===THREE.CullFaceFront?f.FRONT:f.BACK);g.setDepthTest(!0);a.getViewport(u);for(var E=0,y=b.length;E<y;E++){var z=b[E];if(!0===z.castShadow){var B=z.shadow,A=B.camera,C=B.mapSize;if(z instanceof THREE.PointLight){w=6;x=!0;var I=C.x/4,F=C.y/2;v[0].set(2*I,F,I,F);v[1].set(0,F,I,F);v[2].set(3*I,F,I,F);v[3].set(I,
+F,I,F);v[4].set(3*I,0,I,F);v[5].set(I,0,I,F)}else w=1,x=!1;null===B.map&&(I=THREE.LinearFilter,H.type===THREE.PCFSoftShadowMap&&(I=THREE.NearestFilter),B.map=new THREE.WebGLRenderTarget(C.x,C.y,{minFilter:I,magFilter:I,format:THREE.RGBAFormat}),B.matrix=new THREE.Matrix4,z instanceof THREE.SpotLight&&(A.aspect=C.x/C.y),A.updateProjectionMatrix());C=B.map;B=B.matrix;m.setFromMatrixPosition(z.matrixWorld);A.position.copy(m);a.setRenderTarget(C);a.clear();for(C=0;C<w;C++)for(x?(k.copy(A.position),k.add(s[C]),
+A.up.copy(t[C]),A.lookAt(k),I=v[C],a.setViewport(I.x,I.y,I.z,I.w)):(k.setFromMatrixPosition(z.target.matrixWorld),A.lookAt(k)),A.updateMatrixWorld(),A.matrixWorldInverse.getInverse(A.matrixWorld),B.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),B.multiply(A.projectionMatrix),B.multiply(A.matrixWorldInverse),l.multiplyMatrices(A.projectionMatrix,A.matrixWorldInverse),h.setFromMatrix(l),q.length=0,e(n,p,A),I=0,F=q.length;I<F;I++){var U=q[I],V=c.update(U),X=U.material;if(X instanceof THREE.MeshFaceMaterial)for(var aa=
+V.groups,X=X.materials,ca=0,ba=aa.length;ca<ba;ca++){var fa=aa[ca],$=X[fa.materialIndex];!0===$.visible&&($=d(U,$,x,m),a.renderBufferDirect(A,b,null,V,$,U,fa))}else $=d(U,X,x,m),a.renderBufferDirect(A,b,null,V,$,U,null)}a.resetGLState()}}a.setViewport(u.x,u.y,u.z,u.w);w=a.getClearColor();x=a.getClearAlpha();a.setClearColor(w,x);g.enable(f.BLEND);H.cullFace===THREE.CullFaceFront&&f.cullFace(f.BACK);a.resetGLState();H.needsUpdate=!1}}};
+THREE.WebGLState=function(a,b,c){var d=this,e=new Uint8Array(16),f=new Uint8Array(16),g=new Uint8Array(16),h={},l=null,k=null,m=null,q=null,n=null,p=null,s=null,t=null,v=null,u=null,w=null,E=null,x=null,C=null,A=null,B=a.getParameter(a.MAX_TEXTURE_IMAGE_UNITS),y=void 0,I={};this.init=function(){a.clearColor(0,0,0,1);a.clearDepth(1);a.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=e.length;a<b;a++)e[a]=0};this.enableAttribute=function(c){e[c]=1;0===f[c]&&(a.enableVertexAttribArray(c),f[c]=1);0!==g[c]&&(b.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(c,0),g[c]=0)};this.enableAttributeAndDivisor=function(b,c,d){e[b]=1;0===f[b]&&(a.enableVertexAttribArray(b),f[b]=1);g[b]!==c&&(d.vertexAttribDivisorANGLE(b,c),g[b]=c)};this.disableUnusedAttributes=function(){for(var b=0,c=f.length;b<
 c;b++)f[b]!==e[b]&&(a.disableVertexAttribArray(b),f[b]=0)};this.enable=function(b){!0!==h[b]&&(a.enable(b),h[b]=!0)};this.disable=function(b){!1!==h[b]&&(a.disable(b),h[b]=!1)};this.getCompressedTextureFormats=function(){if(null===l&&(l=[],b.get("WEBGL_compressed_texture_pvrtc")||b.get("WEBGL_compressed_texture_s3tc")))for(var c=a.getParameter(a.COMPRESSED_TEXTURE_FORMATS),d=0;d<c.length;d++)l.push(c[d]);return l};this.setBlending=function(b,d,e,f,g,h,l){b!==k&&(b===THREE.NoBlending?this.disable(a.BLEND):
 b===THREE.AdditiveBlending?(this.enable(a.BLEND),a.blendEquation(a.FUNC_ADD),a.blendFunc(a.SRC_ALPHA,a.ONE)):b===THREE.SubtractiveBlending?(this.enable(a.BLEND),a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.ONE_MINUS_SRC_COLOR)):b===THREE.MultiplyBlending?(this.enable(a.BLEND),a.blendEquation(a.FUNC_ADD),a.blendFunc(a.ZERO,a.SRC_COLOR)):b===THREE.CustomBlending?this.enable(a.BLEND):(this.enable(a.BLEND),a.blendEquationSeparate(a.FUNC_ADD,a.FUNC_ADD),a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,
 a.ONE,a.ONE_MINUS_SRC_ALPHA)),k=b);if(b===THREE.CustomBlending){g=g||d;h=h||e;l=l||f;if(d!==m||g!==p)a.blendEquationSeparate(c(d),c(g)),m=d,p=g;if(e!==q||f!==n||h!==s||l!==t)a.blendFuncSeparate(c(e),c(f),c(h),c(l)),q=e,n=f,s=h,t=l}else t=s=p=n=q=m=null};this.setDepthFunc=function(b){if(v!==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);v=b}};this.setDepthTest=function(b){b?this.enable(a.DEPTH_TEST):this.disable(a.DEPTH_TEST)};this.setDepthWrite=function(b){u!==b&&(a.depthMask(b),u=b)};this.setColorWrite=function(b){w!==b&&(a.colorMask(b,b,b,b),w=b)};this.setFlipSided=
 function(b){E!==b&&(b?a.frontFace(a.CW):a.frontFace(a.CCW),E=b)};this.setLineWidth=function(b){b!==x&&(a.lineWidth(b),x=b)};this.setPolygonOffset=function(b,c,d){b?this.enable(a.POLYGON_OFFSET_FILL):this.disable(a.POLYGON_OFFSET_FILL);!b||C===c&&A===d||(a.polygonOffset(c,d),C=c,A=d)};this.setScissorTest=function(b){b?this.enable(a.SCISSOR_TEST):this.disable(a.SCISSOR_TEST)};this.activeTexture=function(b){void 0===b&&(b=a.TEXTURE0+B-1);y!==b&&(a.activeTexture(b),y=b)};this.bindTexture=function(b,c){void 0===
-y&&d.activeTexture();var e=H[y];void 0===e&&(e={type:void 0,texture:void 0},H[y]=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.reset=function(){for(var b=0;b<f.length;b++)1===f[b]&&(a.disableVertexAttribArray(b),f[b]=0);h={};E=w=u=k=l=null}};
-THREE.LensFlarePlugin=function(a,b){var c,d,e,f,g,h,l,k,m,q,n=a.context,p=a.state,s,t,v,u,w,E;this.render=function(x,C,A,B){if(0!==b.length){x=new THREE.Vector3;var y=B/A,H=.5*A,G=.5*B,D=16/B,L=new THREE.Vector2(D*y,D),M=new THREE.Vector3(1,1,0),N=new THREE.Vector2(1,1);if(void 0===v){var D=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]);s=n.createBuffer();t=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,s);n.bufferData(n.ARRAY_BUFFER,D,n.STATIC_DRAW);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,
-t);n.bufferData(n.ELEMENT_ARRAY_BUFFER,K,n.STATIC_DRAW);w=n.createTexture();E=n.createTexture();p.bindTexture(n.TEXTURE_2D,w);n.texImage2D(n.TEXTURE_2D,0,n.RGB,16,16,0,n.RGB,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);p.bindTexture(n.TEXTURE_2D,E);n.texImage2D(n.TEXTURE_2D,0,
+y&&d.activeTexture();var e=I[y];void 0===e&&(e={type:void 0,texture:void 0},I[y]=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.reset=function(){for(var b=0;b<f.length;b++)1===f[b]&&(a.disableVertexAttribArray(b),f[b]=0);h={};E=w=u=k=l=null}};
+THREE.LensFlarePlugin=function(a,b){var c,d,e,f,g,h,l,k,m,q,n=a.context,p=a.state,s,t,v,u,w,E;this.render=function(x,C,A,B){if(0!==b.length){x=new THREE.Vector3;var y=B/A,I=.5*A,H=.5*B,D=16/B,L=new THREE.Vector2(D*y,D),M=new THREE.Vector3(1,1,0),N=new THREE.Vector2(1,1);if(void 0===v){var D=new Float32Array([-1,-1,0,0,1,-1,1,0,1,1,1,1,-1,1,0,1]),J=new Uint16Array([0,1,2,0,2,3]);s=n.createBuffer();t=n.createBuffer();n.bindBuffer(n.ARRAY_BUFFER,s);n.bufferData(n.ARRAY_BUFFER,D,n.STATIC_DRAW);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,
+t);n.bufferData(n.ELEMENT_ARRAY_BUFFER,J,n.STATIC_DRAW);w=n.createTexture();E=n.createTexture();p.bindTexture(n.TEXTURE_2D,w);n.texImage2D(n.TEXTURE_2D,0,n.RGB,16,16,0,n.RGB,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);p.bindTexture(n.TEXTURE_2D,E);n.texImage2D(n.TEXTURE_2D,0,
 n.RGBA,16,16,0,n.RGBA,n.UNSIGNED_BYTE,null);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.NEAREST);n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.NEAREST);var D=(u=0<n.getParameter(n.MAX_VERTEX_TEXTURE_IMAGE_UNITS))?{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}"}:{vertexShader:"uniform lowp int renderType;\nuniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif ( renderType == 2 ) {\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:"precision mediump float;\nuniform lowp int renderType;\nuniform sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform vec3 color;\nvarying vec2 vUV;\nvoid main() {\nif ( renderType == 0 ) {\ngl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\n} else if ( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nfloat visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a;\nvisibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a;\nvisibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a;\nvisibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\nvisibility = ( 1.0 - visibility / 4.0 );\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * visibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},
-K=n.createProgram(),z=n.createShader(n.FRAGMENT_SHADER),I=n.createShader(n.VERTEX_SHADER),O="precision "+a.getPrecision()+" float;\n";n.shaderSource(z,O+D.fragmentShader);n.shaderSource(I,O+D.vertexShader);n.compileShader(z);n.compileShader(I);n.attachShader(K,z);n.attachShader(K,I);n.linkProgram(K);v=K;m=n.getAttribLocation(v,"position");q=n.getAttribLocation(v,"uv");c=n.getUniformLocation(v,"renderType");d=n.getUniformLocation(v,"map");e=n.getUniformLocation(v,"occlusionMap");f=n.getUniformLocation(v,
-"opacity");g=n.getUniformLocation(v,"color");h=n.getUniformLocation(v,"scale");l=n.getUniformLocation(v,"rotation");k=n.getUniformLocation(v,"screenPosition")}n.useProgram(v);p.initAttributes();p.enableAttribute(m);p.enableAttribute(q);p.disableUnusedAttributes();n.uniform1i(e,0);n.uniform1i(d,1);n.bindBuffer(n.ARRAY_BUFFER,s);n.vertexAttribPointer(m,2,n.FLOAT,!1,16,0);n.vertexAttribPointer(q,2,n.FLOAT,!1,16,8);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,t);p.disable(n.CULL_FACE);n.depthMask(!1);K=0;for(z=
-b.length;K<z;K++)if(D=16/B,L.set(D*y,D),I=b[K],x.set(I.matrixWorld.elements[12],I.matrixWorld.elements[13],I.matrixWorld.elements[14]),x.applyMatrix4(C.matrixWorldInverse),x.applyProjection(C.projectionMatrix),M.copy(x),N.x=M.x*H+H,N.y=M.y*G+G,u||0<N.x&&N.x<A&&0<N.y&&N.y<B){p.activeTexture(n.TEXTURE0);p.bindTexture(n.TEXTURE_2D,null);p.activeTexture(n.TEXTURE1);p.bindTexture(n.TEXTURE_2D,w);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGB,N.x-8,N.y-8,16,16,0);n.uniform1i(c,0);n.uniform2f(h,L.x,L.y);n.uniform3f(k,
-M.x,M.y,M.z);p.disable(n.BLEND);p.enable(n.DEPTH_TEST);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);p.activeTexture(n.TEXTURE0);p.bindTexture(n.TEXTURE_2D,E);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGBA,N.x-8,N.y-8,16,16,0);n.uniform1i(c,1);p.disable(n.DEPTH_TEST);p.activeTexture(n.TEXTURE1);p.bindTexture(n.TEXTURE_2D,w);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);I.positionScreen.copy(M);I.customUpdateCallback?I.customUpdateCallback(I):I.updateLensFlares();n.uniform1i(c,2);p.enable(n.BLEND);for(var O=
-0,R=I.lensFlares.length;O<R;O++){var P=I.lensFlares[O];.001<P.opacity&&.001<P.scale&&(M.x=P.x,M.y=P.y,M.z=P.z,D=P.size*P.scale/B,L.x=D*y,L.y=D,n.uniform3f(k,M.x,M.y,M.z),n.uniform2f(h,L.x,L.y),n.uniform1f(l,P.rotation),n.uniform1f(f,P.opacity),n.uniform3f(g,P.color.r,P.color.g,P.color.b),p.setBlending(P.blending,P.blendEquation,P.blendSrc,P.blendDst),a.setTexture(P.texture,1),n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0))}}p.enable(n.CULL_FACE);p.enable(n.DEPTH_TEST);n.depthMask(!0);a.resetGLState()}}};
-THREE.SpritePlugin=function(a,b){var c,d,e,f,g,h,l,k,m,q,n,p,s,t,v,u,w;function E(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var x=a.context,C=a.state,A,B,y,H,G=new THREE.Vector3,D=new THREE.Quaternion,L=new THREE.Vector3;this.render=function(M,N){if(0!==b.length){if(void 0===y){var K=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),z=new Uint16Array([0,1,2,0,2,3]);A=x.createBuffer();B=x.createBuffer();x.bindBuffer(x.ARRAY_BUFFER,A);x.bufferData(x.ARRAY_BUFFER,K,x.STATIC_DRAW);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,
-B);x.bufferData(x.ELEMENT_ARRAY_BUFFER,z,x.STATIC_DRAW);var K=x.createProgram(),z=x.createShader(x.VERTEX_SHADER),I=x.createShader(x.FRAGMENT_SHADER);x.shaderSource(z,["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(I,["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(z);x.compileShader(I);x.attachShader(K,z);x.attachShader(K,I);x.linkProgram(K);y=K;u=x.getAttribLocation(y,"position");w=x.getAttribLocation(y,"uv");c=x.getUniformLocation(y,"uvOffset");d=x.getUniformLocation(y,"uvScale");e=x.getUniformLocation(y,"rotation");f=x.getUniformLocation(y,"scale");g=x.getUniformLocation(y,"color");h=x.getUniformLocation(y,"map");l=x.getUniformLocation(y,"opacity");k=x.getUniformLocation(y,"modelViewMatrix");m=x.getUniformLocation(y,"projectionMatrix");q=
-x.getUniformLocation(y,"fogType");n=x.getUniformLocation(y,"fogDensity");p=x.getUniformLocation(y,"fogNear");s=x.getUniformLocation(y,"fogFar");t=x.getUniformLocation(y,"fogColor");v=x.getUniformLocation(y,"alphaTest");K=document.createElement("canvas");K.width=8;K.height=8;z=K.getContext("2d");z.fillStyle="white";z.fillRect(0,0,8,8);H=new THREE.Texture(K);H.needsUpdate=!0}x.useProgram(y);C.initAttributes();C.enableAttribute(u);C.enableAttribute(w);C.disableUnusedAttributes();C.disable(x.CULL_FACE);
-C.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,A);x.vertexAttribPointer(u,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,B);x.uniformMatrix4fv(m,!1,N.projectionMatrix.elements);C.activeTexture(x.TEXTURE0);x.uniform1i(h,0);z=K=0;(I=M.fog)?(x.uniform3f(t,I.color.r,I.color.g,I.color.b),I instanceof THREE.Fog?(x.uniform1f(p,I.near),x.uniform1f(s,I.far),x.uniform1i(q,1),z=K=1):I instanceof THREE.FogExp2&&(x.uniform1f(n,I.density),x.uniform1i(q,2),z=K=2)):
-(x.uniform1i(q,0),z=K=0);for(var I=0,O=b.length;I<O;I++){var R=b[I];R.modelViewMatrix.multiplyMatrices(N.matrixWorldInverse,R.matrixWorld);R.z=-R.modelViewMatrix.elements[14]}b.sort(E);for(var P=[],I=0,O=b.length;I<O;I++){var R=b[I],Q=R.material;x.uniform1f(v,Q.alphaTest);x.uniformMatrix4fv(k,!1,R.modelViewMatrix.elements);R.matrixWorld.decompose(G,D,L);P[0]=L.x;P[1]=L.y;R=0;M.fog&&Q.fog&&(R=z);K!==R&&(x.uniform1i(q,R),K=R);null!==Q.map?(x.uniform2f(c,Q.map.offset.x,Q.map.offset.y),x.uniform2f(d,
-Q.map.repeat.x,Q.map.repeat.y)):(x.uniform2f(c,0,0),x.uniform2f(d,1,1));x.uniform1f(l,Q.opacity);x.uniform3f(g,Q.color.r,Q.color.g,Q.color.b);x.uniform1f(e,Q.rotation);x.uniform2fv(f,P);C.setBlending(Q.blending,Q.blendEquation,Q.blendSrc,Q.blendDst);C.setDepthTest(Q.depthTest);C.setDepthWrite(Q.depthWrite);Q.map&&Q.map.image&&Q.map.image.width?a.setTexture(Q.map,0):a.setTexture(H,0);x.drawElements(x.TRIANGLES,6,x.UNSIGNED_SHORT,0)}C.enable(x.CULL_FACE);a.resetGLState()}}};
+J=n.createProgram(),G=n.createShader(n.FRAGMENT_SHADER),z=n.createShader(n.VERTEX_SHADER),O="precision "+a.getPrecision()+" float;\n";n.shaderSource(G,O+D.fragmentShader);n.shaderSource(z,O+D.vertexShader);n.compileShader(G);n.compileShader(z);n.attachShader(J,G);n.attachShader(J,z);n.linkProgram(J);v=J;m=n.getAttribLocation(v,"position");q=n.getAttribLocation(v,"uv");c=n.getUniformLocation(v,"renderType");d=n.getUniformLocation(v,"map");e=n.getUniformLocation(v,"occlusionMap");f=n.getUniformLocation(v,
+"opacity");g=n.getUniformLocation(v,"color");h=n.getUniformLocation(v,"scale");l=n.getUniformLocation(v,"rotation");k=n.getUniformLocation(v,"screenPosition")}n.useProgram(v);p.initAttributes();p.enableAttribute(m);p.enableAttribute(q);p.disableUnusedAttributes();n.uniform1i(e,0);n.uniform1i(d,1);n.bindBuffer(n.ARRAY_BUFFER,s);n.vertexAttribPointer(m,2,n.FLOAT,!1,16,0);n.vertexAttribPointer(q,2,n.FLOAT,!1,16,8);n.bindBuffer(n.ELEMENT_ARRAY_BUFFER,t);p.disable(n.CULL_FACE);n.depthMask(!1);J=0;for(G=
+b.length;J<G;J++)if(D=16/B,L.set(D*y,D),z=b[J],x.set(z.matrixWorld.elements[12],z.matrixWorld.elements[13],z.matrixWorld.elements[14]),x.applyMatrix4(C.matrixWorldInverse),x.applyProjection(C.projectionMatrix),M.copy(x),N.x=M.x*I+I,N.y=M.y*H+H,u||0<N.x&&N.x<A&&0<N.y&&N.y<B){p.activeTexture(n.TEXTURE0);p.bindTexture(n.TEXTURE_2D,null);p.activeTexture(n.TEXTURE1);p.bindTexture(n.TEXTURE_2D,w);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGB,N.x-8,N.y-8,16,16,0);n.uniform1i(c,0);n.uniform2f(h,L.x,L.y);n.uniform3f(k,
+M.x,M.y,M.z);p.disable(n.BLEND);p.enable(n.DEPTH_TEST);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);p.activeTexture(n.TEXTURE0);p.bindTexture(n.TEXTURE_2D,E);n.copyTexImage2D(n.TEXTURE_2D,0,n.RGBA,N.x-8,N.y-8,16,16,0);n.uniform1i(c,1);p.disable(n.DEPTH_TEST);p.activeTexture(n.TEXTURE1);p.bindTexture(n.TEXTURE_2D,w);n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0);z.positionScreen.copy(M);z.customUpdateCallback?z.customUpdateCallback(z):z.updateLensFlares();n.uniform1i(c,2);p.enable(n.BLEND);for(var O=
+0,R=z.lensFlares.length;O<R;O++){var P=z.lensFlares[O];.001<P.opacity&&.001<P.scale&&(M.x=P.x,M.y=P.y,M.z=P.z,D=P.size*P.scale/B,L.x=D*y,L.y=D,n.uniform3f(k,M.x,M.y,M.z),n.uniform2f(h,L.x,L.y),n.uniform1f(l,P.rotation),n.uniform1f(f,P.opacity),n.uniform3f(g,P.color.r,P.color.g,P.color.b),p.setBlending(P.blending,P.blendEquation,P.blendSrc,P.blendDst),a.setTexture(P.texture,1),n.drawElements(n.TRIANGLES,6,n.UNSIGNED_SHORT,0))}}p.enable(n.CULL_FACE);p.enable(n.DEPTH_TEST);n.depthMask(!0);a.resetGLState()}}};
+THREE.SpritePlugin=function(a,b){var c,d,e,f,g,h,l,k,m,q,n,p,s,t,v,u,w;function E(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var x=a.context,C=a.state,A,B,y,I,H=new THREE.Vector3,D=new THREE.Quaternion,L=new THREE.Vector3;this.render=function(M,N){if(0!==b.length){if(void 0===y){var J=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),G=new Uint16Array([0,1,2,0,2,3]);A=x.createBuffer();B=x.createBuffer();x.bindBuffer(x.ARRAY_BUFFER,A);x.bufferData(x.ARRAY_BUFFER,J,x.STATIC_DRAW);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,
+B);x.bufferData(x.ELEMENT_ARRAY_BUFFER,G,x.STATIC_DRAW);var J=x.createProgram(),G=x.createShader(x.VERTEX_SHADER),z=x.createShader(x.FRAGMENT_SHADER);x.shaderSource(G,["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(z,["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(G);x.compileShader(z);x.attachShader(J,G);x.attachShader(J,z);x.linkProgram(J);y=J;u=x.getAttribLocation(y,"position");w=x.getAttribLocation(y,"uv");c=x.getUniformLocation(y,"uvOffset");d=x.getUniformLocation(y,"uvScale");e=x.getUniformLocation(y,"rotation");f=x.getUniformLocation(y,"scale");g=x.getUniformLocation(y,"color");h=x.getUniformLocation(y,"map");l=x.getUniformLocation(y,"opacity");k=x.getUniformLocation(y,"modelViewMatrix");m=x.getUniformLocation(y,"projectionMatrix");q=
+x.getUniformLocation(y,"fogType");n=x.getUniformLocation(y,"fogDensity");p=x.getUniformLocation(y,"fogNear");s=x.getUniformLocation(y,"fogFar");t=x.getUniformLocation(y,"fogColor");v=x.getUniformLocation(y,"alphaTest");J=document.createElement("canvas");J.width=8;J.height=8;G=J.getContext("2d");G.fillStyle="white";G.fillRect(0,0,8,8);I=new THREE.Texture(J);I.needsUpdate=!0}x.useProgram(y);C.initAttributes();C.enableAttribute(u);C.enableAttribute(w);C.disableUnusedAttributes();C.disable(x.CULL_FACE);
+C.enable(x.BLEND);x.bindBuffer(x.ARRAY_BUFFER,A);x.vertexAttribPointer(u,2,x.FLOAT,!1,16,0);x.vertexAttribPointer(w,2,x.FLOAT,!1,16,8);x.bindBuffer(x.ELEMENT_ARRAY_BUFFER,B);x.uniformMatrix4fv(m,!1,N.projectionMatrix.elements);C.activeTexture(x.TEXTURE0);x.uniform1i(h,0);G=J=0;(z=M.fog)?(x.uniform3f(t,z.color.r,z.color.g,z.color.b),z instanceof THREE.Fog?(x.uniform1f(p,z.near),x.uniform1f(s,z.far),x.uniform1i(q,1),G=J=1):z instanceof THREE.FogExp2&&(x.uniform1f(n,z.density),x.uniform1i(q,2),G=J=2)):
+(x.uniform1i(q,0),G=J=0);for(var z=0,O=b.length;z<O;z++){var R=b[z];R.modelViewMatrix.multiplyMatrices(N.matrixWorldInverse,R.matrixWorld);R.z=-R.modelViewMatrix.elements[14]}b.sort(E);for(var P=[],z=0,O=b.length;z<O;z++){var R=b[z],Q=R.material;x.uniform1f(v,Q.alphaTest);x.uniformMatrix4fv(k,!1,R.modelViewMatrix.elements);R.matrixWorld.decompose(H,D,L);P[0]=L.x;P[1]=L.y;R=0;M.fog&&Q.fog&&(R=G);J!==R&&(x.uniform1i(q,R),J=R);null!==Q.map?(x.uniform2f(c,Q.map.offset.x,Q.map.offset.y),x.uniform2f(d,
+Q.map.repeat.x,Q.map.repeat.y)):(x.uniform2f(c,0,0),x.uniform2f(d,1,1));x.uniform1f(l,Q.opacity);x.uniform3f(g,Q.color.r,Q.color.g,Q.color.b);x.uniform1f(e,Q.rotation);x.uniform2fv(f,P);C.setBlending(Q.blending,Q.blendEquation,Q.blendSrc,Q.blendDst);C.setDepthTest(Q.depthTest);C.setDepthWrite(Q.depthWrite);Q.map&&Q.map.image&&Q.map.image.width?a.setTexture(Q.map,0):a.setTexture(I,0);x.drawElements(x.TRIANGLES,6,x.UNSIGNED_SHORT,0)}C.enable(x.CULL_FACE);a.resetGLState()}}};
 Object.defineProperties(THREE.Light.prototype,{onlyShadow:{set:function(a){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(a){this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){this.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){this.shadow.camera.near=
 a}},shadowCameraFar:{set:function(a){this.shadow.camera.far=a}},shadowCameraVisible:{set:function(a){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow ) instead.")}},shadowBias:{set:function(a){this.shadow.bias=a}},shadowDarkness:{set:function(a){this.shadow.darkness=a}},shadowMapWidth:{set:function(a){this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){this.shadow.mapSize.height=a}}});
 Object.defineProperties(THREE.WebGLRenderer.prototype,{supportsFloatTextures:{value:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return this.extensions.get("OES_texture_float")}},supportsHalfFloatTextures:{value:function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).");return this.extensions.get("OES_texture_half_float")}},supportsStandardDerivatives:{value:function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");
@@ -756,13 +756,13 @@ THREE.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been mov
 THREE.CurveUtils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a,b,c,d,e){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){a=.5*(c-a);d=.5*(d-b);var f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}};
 THREE.SceneUtils={createMultiMaterialObject:function(a,b){for(var c=new THREE.Group,d=0,e=b.length;d<e;d++)c.add(new THREE.Mesh(a,b[d]));return c},detach:function(a,b,c){a.applyMatrix(b.matrixWorld);b.remove(a);c.add(a)},attach:function(a,b,c){var d=new THREE.Matrix4;d.getInverse(c.matrixWorld);a.applyMatrix(d);b.remove(a);c.add(a)}};
 THREE.ShapeUtils={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e<b;d=e++)c+=a[d].x*a[e].y-a[e].x*a[d].y;return.5*c},triangulate:function(){return function(a,b){var c=a.length;if(3>c)return null;var d=[],e=[],f=[],g,h,l;if(0<THREE.ShapeUtils.area(a))for(h=0;h<c;h++)e[h]=h;else for(h=0;h<c;h++)e[h]=c-1-h;var k=2*c;for(h=c-1;2<c;){if(0>=k--){console.warn("THREE.ShapeUtils: Unable to triangulate polygon! in triangulate()");break}g=h;c<=g&&(g=0);h=g+1;c<=h&&(h=0);l=h+1;c<=l&&(l=0);var m;a:{var q=
-m=void 0,n=void 0,p=void 0,s=void 0,t=void 0,v=void 0,u=void 0,w=void 0,q=a[e[g]].x,n=a[e[g]].y,p=a[e[h]].x,s=a[e[h]].y,t=a[e[l]].x,v=a[e[l]].y;if(Number.EPSILON>(p-q)*(v-n)-(s-n)*(t-q))m=!1;else{var E=void 0,x=void 0,C=void 0,A=void 0,B=void 0,y=void 0,H=void 0,G=void 0,D=void 0,L=void 0,D=G=H=w=u=void 0,E=t-p,x=v-s,C=q-t,A=n-v,B=p-q,y=s-n;for(m=0;m<c;m++)if(u=a[e[m]].x,w=a[e[m]].y,!(u===q&&w===n||u===p&&w===s||u===t&&w===v)&&(H=u-q,G=w-n,D=u-p,L=w-s,u-=t,w-=v,D=E*L-x*D,H=B*G-y*H,G=C*w-A*u,D>=-Number.EPSILON&&
-G>=-Number.EPSILON&&H>=-Number.EPSILON)){m=!1;break a}m=!0}}if(m){d.push([a[e[g]],a[e[h]],a[e[l]]]);f.push([e[g],e[h],e[l]]);g=h;for(l=h+1;l<c;g++,l++)e[g]=e[l];c--;k=2*c}}return b?f:d}}(),triangulateShape:function(a,b){function c(a,b,c){return a.x!==b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function d(a,b,d,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-d.x,l=e.y-d.y,m=a.x-d.x,q=a.y-d.y,B=h*k-g*l,y=h*m-g*q;if(Math.abs(B)>Number.EPSILON){if(0<B){if(0>y||y>
+m=void 0,n=void 0,p=void 0,s=void 0,t=void 0,v=void 0,u=void 0,w=void 0,q=a[e[g]].x,n=a[e[g]].y,p=a[e[h]].x,s=a[e[h]].y,t=a[e[l]].x,v=a[e[l]].y;if(Number.EPSILON>(p-q)*(v-n)-(s-n)*(t-q))m=!1;else{var E=void 0,x=void 0,C=void 0,A=void 0,B=void 0,y=void 0,I=void 0,H=void 0,D=void 0,L=void 0,D=H=I=w=u=void 0,E=t-p,x=v-s,C=q-t,A=n-v,B=p-q,y=s-n;for(m=0;m<c;m++)if(u=a[e[m]].x,w=a[e[m]].y,!(u===q&&w===n||u===p&&w===s||u===t&&w===v)&&(I=u-q,H=w-n,D=u-p,L=w-s,u-=t,w-=v,D=E*L-x*D,I=B*H-y*I,H=C*w-A*u,D>=-Number.EPSILON&&
+H>=-Number.EPSILON&&I>=-Number.EPSILON)){m=!1;break a}m=!0}}if(m){d.push([a[e[g]],a[e[h]],a[e[l]]]);f.push([e[g],e[h],e[l]]);g=h;for(l=h+1;l<c;g++,l++)e[g]=e[l];c--;k=2*c}}return b?f:d}}(),triangulateShape:function(a,b){function c(a,b,c){return a.x!==b.x?a.x<b.x?a.x<=c.x&&c.x<=b.x:b.x<=c.x&&c.x<=a.x:a.y<b.y?a.y<=c.y&&c.y<=b.y:b.y<=c.y&&c.y<=a.y}function d(a,b,d,e,f){var g=b.x-a.x,h=b.y-a.y,k=e.x-d.x,l=e.y-d.y,m=a.x-d.x,q=a.y-d.y,B=h*k-g*l,y=h*m-g*q;if(Math.abs(B)>Number.EPSILON){if(0<B){if(0>y||y>
 B)return[];k=l*m-k*q;if(0>k||k>B)return[]}else{if(0<y||y<B)return[];k=l*m-k*q;if(0<k||k<B)return[]}if(0===k)return!f||0!==y&&y!==B?[a]:[];if(k===B)return!f||0!==y&&y!==B?[b]:[];if(0===y)return[d];if(y===B)return[e];f=k/B;return[{x:a.x+f*g,y:a.y+f*h}]}if(0!==y||l*m!==k*q)return[];h=0===g&&0===h;k=0===k&&0===l;if(h&&k)return a.x!==d.x||a.y!==d.y?[]:[a];if(h)return c(d,e,a)?[a]:[];if(k)return c(a,b,d)?[d]:[];0!==g?(a.x<b.x?(g=a,k=a.x,h=b,a=b.x):(g=b,k=b.x,h=a,a=a.x),d.x<e.x?(b=d,B=d.x,l=e,d=e.x):(b=
 e,B=e.x,l=d,d=d.x)):(a.y<b.y?(g=a,k=a.y,h=b,a=b.y):(g=b,k=b.y,h=a,a=a.y),d.y<e.y?(b=d,B=d.y,l=e,d=e.y):(b=e,B=e.y,l=d,d=d.y));return k<=B?a<B?[]:a===B?f?[]:[b]:a<=d?[b,h]:[b,l]:k>d?[]:k===d?f?[]:[g]:a<=d?[g,h]:[g,l]}function e(a,b,c,d){var e=b.x-a.x,f=b.y-a.y;b=c.x-a.x;c=c.y-a.y;var g=d.x-a.x;d=d.y-a.y;a=e*c-f*b;e=e*d-f*g;return Math.abs(a)>Number.EPSILON?(b=g*c-d*b,0<a?0<=e&&0<=b:0<=e||0<=b):0<e}var f,g,h,l,k,m={};h=a.concat();f=0;for(g=b.length;f<g;f++)Array.prototype.push.apply(h,b[f]);f=0;for(g=
 h.length;f<g;f++)k=h[f].x+":"+h[f].y,void 0!==m[k]&&console.warn("THREE.Shape: Duplicate point",k),m[k]=f;f=function(a,b){function c(a,b){var d=h.length-1,f=a-1;0>f&&(f=d);var g=a+1;g>d&&(g=0);d=e(h[a],h[f],h[g],k[b]);if(!d)return!1;d=k.length-1;f=b-1;0>f&&(f=d);g=b+1;g>d&&(g=0);return(d=e(k[b],k[f],k[g],h[a]))?!0:!1}function f(a,b){var c,e;for(c=0;c<h.length;c++)if(e=c+1,e%=h.length,e=d(a,b,h[c],h[e],!0),0<e.length)return!0;return!1}function g(a,c){var e,f,h,k;for(e=0;e<l.length;e++)for(f=b[l[e]],
-h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=d(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,l=[],m,q,A,B,y,H=[],G,D,L,M=0;for(m=b.length;M<m;M++)l.push(M);G=0;for(var N=2*l.length;0<l.length;){N--;if(0>N){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(q=G;q<h.length;q++){A=h[q];m=-1;for(M=0;M<l.length;M++)if(B=l[M],y=A.x+":"+A.y+":"+B,void 0===H[y]){k=b[B];for(D=0;D<k.length;D++)if(B=k[D],c(q,D)&&!f(A,B)&&!g(A,B)){m=D;l.splice(M,1);
-G=h.slice(0,q+1);B=h.slice(q);D=k.slice(m);L=k.slice(0,m+1);h=G.concat(D).concat(L).concat(B);G=q;break}if(0<=m)break;H[y]=!0}if(0<=m)break}}return h}(a,b);var q=THREE.ShapeUtils.triangulate(f,!1);f=0;for(g=q.length;f<g;f++)for(l=q[f],h=0;3>h;h++)k=l[h].x+":"+l[h].y,k=m[k],void 0!==k&&(l[h]=k);return q.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=
+h=0;h<f.length;h++)if(k=h+1,k%=f.length,k=d(a,c,f[h],f[k],!0),0<k.length)return!0;return!1}var h=a.concat(),k,l=[],m,q,A,B,y,I=[],H,D,L,M=0;for(m=b.length;M<m;M++)l.push(M);H=0;for(var N=2*l.length;0<l.length;){N--;if(0>N){console.log("Infinite Loop! Holes left:"+l.length+", Probably Hole outside Shape!");break}for(q=H;q<h.length;q++){A=h[q];m=-1;for(M=0;M<l.length;M++)if(B=l[M],y=A.x+":"+A.y+":"+B,void 0===I[y]){k=b[B];for(D=0;D<k.length;D++)if(B=k[D],c(q,D)&&!f(A,B)&&!g(A,B)){m=D;l.splice(M,1);
+H=h.slice(0,q+1);B=h.slice(q);D=k.slice(m);L=k.slice(0,m+1);h=H.concat(D).concat(L).concat(B);H=q;break}if(0<=m)break;I[y]=!0}if(0<=m)break}}return h}(a,b);var q=THREE.ShapeUtils.triangulate(f,!1);f=0;for(g=q.length;f<g;f++)for(l=q[f],h=0;3>h;h++)k=l[h].x+":"+l[h].y,k=m[k],void 0!==k&&(l[h]=k);return q.concat()},isClockWise:function(a){return 0>THREE.ShapeUtils.area(a)},b2:function(){return function(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}}(),b3:function(){return function(a,b,c,d,e){var f=
 1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}}()};THREE.Audio=function(a){THREE.Object3D.call(this);this.type="Audio";this.context=a.context;this.source=this.context.createBufferSource();this.source.onended=this.onEnded.bind(this);this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.panner=this.context.createPanner();this.panner.connect(this.gain);this.autoplay=!1;this.startTime=0;this.playbackRate=1;this.isPlaying=!1};THREE.Audio.prototype=Object.create(THREE.Object3D.prototype);
 THREE.Audio.prototype.constructor=THREE.Audio;THREE.Audio.prototype.load=function(a){var b=this,c=new XMLHttpRequest;c.open("GET",a,!0);c.responseType="arraybuffer";c.onload=function(a){b.context.decodeAudioData(this.response,function(a){b.source.buffer=a;b.autoplay&&b.play()})};c.send();return this};
 THREE.Audio.prototype.play=function(){if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else{var a=this.context.createBufferSource();a.buffer=this.source.buffer;a.loop=this.source.loop;a.onended=this.source.onended;a.start(0,this.startTime);a.playbackRate.value=this.playbackRate;this.isPlaying=!0;this.source=a;this.connect()}};THREE.Audio.prototype.pause=function(){this.source.stop();this.startTime=this.context.currentTime};
@@ -809,8 +809,8 @@ THREE.CatmullRomCurve3=function(){function a(){}var b=new THREE.Vector3,c=new a,
 b*a};return THREE.Curve.create(function(a){this.points=a||[]},function(a){var g=this.points,h,l;l=g.length;2>l&&console.log("duh, you need at least 2 points");a*=l-1;h=Math.floor(a);a-=h;0===a&&h===l-1&&(h=l-2,a=1);var k,m,q;0===h?(b.subVectors(g[0],g[1]).add(g[0]),k=b):k=g[h-1];m=g[h];q=g[h+1];h+2<l?g=g[h+2]:(b.subVectors(g[l-1],g[l-2]).add(g[l-2]),g=b);if(void 0===this.type||"centripetal"===this.type||"chordal"===this.type){var n="chordal"===this.type?.5:.25;l=Math.pow(k.distanceToSquared(m),n);
 h=Math.pow(m.distanceToSquared(q),n);n=Math.pow(q.distanceToSquared(g),n);1E-4>h&&(h=1);1E-4>l&&(l=h);1E-4>n&&(n=h);c.initNonuniformCatmullRom(k.x,m.x,q.x,g.x,l,h,n);d.initNonuniformCatmullRom(k.y,m.y,q.y,g.y,l,h,n);e.initNonuniformCatmullRom(k.z,m.z,q.z,g.z,l,h,n)}else"catmullrom"===this.type&&(l=void 0!==this.tension?this.tension:.5,c.initCatmullRom(k.x,m.x,q.x,g.x,l),d.initCatmullRom(k.y,m.y,q.y,g.y,l),e.initCatmullRom(k.z,m.z,q.z,g.z,l));return new THREE.Vector3(c.calc(a),d.calc(a),e.calc(a))})}();
 THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=this.points;a*=b.length-0;var c=Math.floor(a);a-=c;var c=c+(0<c?0:(Math.floor(Math.abs(c)/b.length)+1)*b.length),d=b[(c-1)%b.length],e=b[c%b.length],f=b[(c+1)%b.length],b=b[(c+2)%b.length],c=THREE.CurveUtils.interpolate;return new THREE.Vector3(c(d.x,e.x,f.x,b.x,a),c(d.y,e.y,f.y,b.y,a),c(d.z,e.z,f.z,b.z,a))});
-THREE.BoxGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,t){var v,u=h.widthSegments,w=h.heightSegments,E=e/2,x=f/2,C=h.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)v="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)v="y",w=h.depthSegments;else if("z"===a&&"y"===b||"y"===a&&"z"===b)v="x",u=h.depthSegments;var A=u+1,B=w+1,y=e/u,H=f/w,G=new THREE.Vector3;G[v]=0<g?1:-1;for(e=0;e<B;e++)for(f=0;f<A;f++){var D=new THREE.Vector3;D[a]=(f*y-E)*c;D[b]=(e*H-x)*d;D[v]=g;h.vertices.push(D)}for(e=
-0;e<w;e++)for(f=0;f<u;f++)x=f+A*e,a=f+A*(e+1),b=f+1+A*(e+1),c=f+1+A*e,d=new THREE.Vector2(f/u,1-e/w),g=new THREE.Vector2(f/u,1-(e+1)/w),v=new THREE.Vector2((f+1)/u,1-(e+1)/w),E=new THREE.Vector2((f+1)/u,1-e/w),x=new THREE.Face3(x+C,a+C,c+C),x.normal.copy(G),x.vertexNormals.push(G.clone(),G.clone(),G.clone()),x.materialIndex=t,h.faces.push(x),h.faceVertexUvs[0].push([d,g,E]),x=new THREE.Face3(a+C,b+C,c+C),x.normal.copy(G),x.vertexNormals.push(G.clone(),G.clone(),G.clone()),x.materialIndex=t,h.faces.push(x),
+THREE.BoxGeometry=function(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,t){var v,u=h.widthSegments,w=h.heightSegments,E=e/2,x=f/2,C=h.vertices.length;if("x"===a&&"y"===b||"y"===a&&"x"===b)v="z";else if("x"===a&&"z"===b||"z"===a&&"x"===b)v="y",w=h.depthSegments;else if("z"===a&&"y"===b||"y"===a&&"z"===b)v="x",u=h.depthSegments;var A=u+1,B=w+1,y=e/u,I=f/w,H=new THREE.Vector3;H[v]=0<g?1:-1;for(e=0;e<B;e++)for(f=0;f<A;f++){var D=new THREE.Vector3;D[a]=(f*y-E)*c;D[b]=(e*I-x)*d;D[v]=g;h.vertices.push(D)}for(e=
+0;e<w;e++)for(f=0;f<u;f++)x=f+A*e,a=f+A*(e+1),b=f+1+A*(e+1),c=f+1+A*e,d=new THREE.Vector2(f/u,1-e/w),g=new THREE.Vector2(f/u,1-(e+1)/w),v=new THREE.Vector2((f+1)/u,1-(e+1)/w),E=new THREE.Vector2((f+1)/u,1-e/w),x=new THREE.Face3(x+C,a+C,c+C),x.normal.copy(H),x.vertexNormals.push(H.clone(),H.clone(),H.clone()),x.materialIndex=t,h.faces.push(x),h.faceVertexUvs[0].push([d,g,E]),x=new THREE.Face3(a+C,b+C,c+C),x.normal.copy(H),x.vertexNormals.push(H.clone(),H.clone(),H.clone()),x.materialIndex=t,h.faces.push(x),
 h.faceVertexUvs[0].push([g.clone(),v,E.clone()])}THREE.Geometry.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.widthSegments=d||1;this.heightSegments=e||1;this.depthSegments=f||1;var h=this;d=a/2;e=b/2;f=c/2;g("z","y",-1,-1,c,b,d,0);g("z","y",1,-1,c,b,-d,1);g("x","z",1,1,a,c,e,2);g("x","z",1,-1,a,c,-e,3);g("x","y",1,-1,a,b,f,4);g("x","y",-1,-1,a,b,-f,5);this.mergeVertices()};THREE.BoxGeometry.prototype=Object.create(THREE.Geometry.prototype);
 THREE.BoxGeometry.prototype.constructor=THREE.BoxGeometry;THREE.CubeGeometry=THREE.BoxGeometry;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;
 THREE.CircleBufferGeometry=function(a,b,c,d){THREE.BufferGeometry.call(this);this.type="CircleBufferGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};a=a||50;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=b+2,f=new Float32Array(3*e),g=new Float32Array(3*e),e=new Float32Array(2*e);g[2]=1;e[0]=.5;e[1]=.5;for(var h=0,l=3,k=2;h<=b;h++,l+=3,k+=2){var m=c+h/b*d;f[l]=a*Math.cos(m);f[l+1]=a*Math.sin(m);g[l+2]=1;e[k]=(f[l]/a+1)/2;e[k+1]=(f[l+1]/a+1)/2}c=
@@ -824,12 +824,12 @@ THREE.EdgesGeometry=function(a,b){function c(a,b){return a-b}THREE.BufferGeometr
 face2:void 0}:f[p].face2=k}e=[];for(p in f)if(g=f[p],void 0===g.face2||h[g.face1].normal.dot(h[g.face2].normal)<=d)k=l[g.vert1],e.push(k.x),e.push(k.y),e.push(k.z),k=l[g.vert2],e.push(k.x),e.push(k.y),e.push(k.z);this.addAttribute("position",new THREE.BufferAttribute(new Float32Array(e),3))};THREE.EdgesGeometry.prototype=Object.create(THREE.BufferGeometry.prototype);THREE.EdgesGeometry.prototype.constructor=THREE.EdgesGeometry;
 THREE.ExtrudeGeometry=function(a,b){"undefined"!==typeof a&&(THREE.Geometry.call(this),this.type="ExtrudeGeometry",a=Array.isArray(a)?a:[a],this.addShapeList(a,b),this.computeFaceNormals())};THREE.ExtrudeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ExtrudeGeometry.prototype.constructor=THREE.ExtrudeGeometry;THREE.ExtrudeGeometry.prototype.addShapeList=function(a,b){for(var c=a.length,d=0;d<c;d++)this.addShape(a[d],b)};
 THREE.ExtrudeGeometry.prototype.addShape=function(a,b){function c(a,b,c){b||console.error("THREE.ExtrudeGeometry: vec does not exist");return b.clone().multiplyScalar(c).add(a)}function d(a,b,c){var d=1,d=a.x-b.x,e=a.y-b.y,f=c.x-a.x,g=c.y-a.y,h=d*d+e*e;if(Math.abs(d*g-e*f)>Number.EPSILON){var k=Math.sqrt(h),l=Math.sqrt(f*f+g*g),h=b.x-e/k;b=b.y+d/k;f=((c.x-g/l-h)*g-(c.y+f/l-b)*f)/(d*g-e*f);c=h+d*f-a.x;a=b+e*f-a.y;d=c*c+a*a;if(2>=d)return new THREE.Vector2(c,a);d=Math.sqrt(d/2)}else a=!1,d>Number.EPSILON?
-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(F=a.length;0<=--F;){c=F;d=F-1;0>d&&(d=a.length-1);for(var e=0,f=p+2*m,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+G,g=g+G,l=l+G,h=h+G;H.faces.push(new THREE.Face3(k,g,h,null,null,1));H.faces.push(new THREE.Face3(g,l,h,null,null,1));k=u.generateSideWallUV(H,
-k,g,l,h);H.faceVertexUvs[0].push([k[0],k[1],k[3]]);H.faceVertexUvs[0].push([k[1],k[2],k[3]])}}}function f(a,b,c){H.vertices.push(new THREE.Vector3(a,b,c))}function g(a,b,c){a+=G;b+=G;c+=G;H.faces.push(new THREE.Face3(a,b,c,null,null,0));a=u.generateTopUV(H,a,b,c);H.faceVertexUvs[0].push(a)}var h=void 0!==b.amount?b.amount:100,l=void 0!==b.bevelThickness?b.bevelThickness:6,k=void 0!==b.bevelSize?b.bevelSize:l-2,m=void 0!==b.bevelSegments?b.bevelSegments:3,q=void 0!==b.bevelEnabled?b.bevelEnabled:!0,
-n=void 0!==b.curveSegments?b.curveSegments:12,p=void 0!==b.steps?b.steps:1,s=b.extrudePath,t,v=!1,u=void 0!==b.UVGenerator?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,w,E,x,C;s&&(t=s.getSpacedPoints(p),v=!0,q=!1,w=void 0!==b.frames?b.frames:new THREE.TubeGeometry.FrenetFrames(s,p,!1),E=new THREE.Vector3,x=new THREE.Vector3,C=new THREE.Vector3);q||(k=l=m=0);var A,B,y,H=this,G=this.vertices.length,s=a.extractPoints(n),n=s.shape,D=s.holes;if(s=!THREE.ShapeUtils.isClockWise(n)){n=n.reverse();
-B=0;for(y=D.length;B<y;B++)A=D[B],THREE.ShapeUtils.isClockWise(A)&&(D[B]=A.reverse());s=!1}var L=THREE.ShapeUtils.triangulateShape(n,D),M=n;B=0;for(y=D.length;B<y;B++)A=D[B],n=n.concat(A);var N,K,z,I,O,R=n.length,P,Q=L.length,s=[],F=0;z=M.length;N=z-1;for(K=F+1;F<z;F++,N++,K++)N===z&&(N=0),K===z&&(K=0),s[F]=d(M[F],M[N],M[K]);var U=[],V,X=s.concat();B=0;for(y=D.length;B<y;B++){A=D[B];V=[];F=0;z=A.length;N=z-1;for(K=F+1;F<z;F++,N++,K++)N===z&&(N=0),K===z&&(K=0),V[F]=d(A[F],A[N],A[K]);U.push(V);X=X.concat(V)}for(N=
-0;N<m;N++){z=N/m;I=l*(1-z);K=k*Math.sin(z*Math.PI/2);F=0;for(z=M.length;F<z;F++)O=c(M[F],s[F],K),f(O.x,O.y,-I);B=0;for(y=D.length;B<y;B++)for(A=D[B],V=U[B],F=0,z=A.length;F<z;F++)O=c(A[F],V[F],K),f(O.x,O.y,-I)}K=k;for(F=0;F<R;F++)O=q?c(n[F],X[F],K):n[F],v?(x.copy(w.normals[0]).multiplyScalar(O.x),E.copy(w.binormals[0]).multiplyScalar(O.y),C.copy(t[0]).add(x).add(E),f(C.x,C.y,C.z)):f(O.x,O.y,0);for(z=1;z<=p;z++)for(F=0;F<R;F++)O=q?c(n[F],X[F],K):n[F],v?(x.copy(w.normals[z]).multiplyScalar(O.x),E.copy(w.binormals[z]).multiplyScalar(O.y),
-C.copy(t[z]).add(x).add(E),f(C.x,C.y,C.z)):f(O.x,O.y,h/p*z);for(N=m-1;0<=N;N--){z=N/m;I=l*(1-z);K=k*Math.sin(z*Math.PI/2);F=0;for(z=M.length;F<z;F++)O=c(M[F],s[F],K),f(O.x,O.y,h+I);B=0;for(y=D.length;B<y;B++)for(A=D[B],V=U[B],F=0,z=A.length;F<z;F++)O=c(A[F],V[F],K),v?f(O.x,O.y+t[p-1].y,t[p-1].x+I):f(O.x,O.y,h+I)}(function(){if(q){var a;a=0*R;for(F=0;F<Q;F++)P=L[F],g(P[2]+a,P[1]+a,P[0]+a);a=p+2*m;a*=R;for(F=0;F<Q;F++)P=L[F],g(P[0]+a,P[1]+a,P[2]+a)}else{for(F=0;F<Q;F++)P=L[F],g(P[2],P[1],P[0]);for(F=
+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(F=a.length;0<=--F;){c=F;d=F-1;0>d&&(d=a.length-1);for(var e=0,f=p+2*m,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+H,g=g+H,l=l+H,h=h+H;I.faces.push(new THREE.Face3(k,g,h,null,null,1));I.faces.push(new THREE.Face3(g,l,h,null,null,1));k=u.generateSideWallUV(I,
+k,g,l,h);I.faceVertexUvs[0].push([k[0],k[1],k[3]]);I.faceVertexUvs[0].push([k[1],k[2],k[3]])}}}function f(a,b,c){I.vertices.push(new THREE.Vector3(a,b,c))}function g(a,b,c){a+=H;b+=H;c+=H;I.faces.push(new THREE.Face3(a,b,c,null,null,0));a=u.generateTopUV(I,a,b,c);I.faceVertexUvs[0].push(a)}var h=void 0!==b.amount?b.amount:100,l=void 0!==b.bevelThickness?b.bevelThickness:6,k=void 0!==b.bevelSize?b.bevelSize:l-2,m=void 0!==b.bevelSegments?b.bevelSegments:3,q=void 0!==b.bevelEnabled?b.bevelEnabled:!0,
+n=void 0!==b.curveSegments?b.curveSegments:12,p=void 0!==b.steps?b.steps:1,s=b.extrudePath,t,v=!1,u=void 0!==b.UVGenerator?b.UVGenerator:THREE.ExtrudeGeometry.WorldUVGenerator,w,E,x,C;s&&(t=s.getSpacedPoints(p),v=!0,q=!1,w=void 0!==b.frames?b.frames:new THREE.TubeGeometry.FrenetFrames(s,p,!1),E=new THREE.Vector3,x=new THREE.Vector3,C=new THREE.Vector3);q||(k=l=m=0);var A,B,y,I=this,H=this.vertices.length,s=a.extractPoints(n),n=s.shape,D=s.holes;if(s=!THREE.ShapeUtils.isClockWise(n)){n=n.reverse();
+B=0;for(y=D.length;B<y;B++)A=D[B],THREE.ShapeUtils.isClockWise(A)&&(D[B]=A.reverse());s=!1}var L=THREE.ShapeUtils.triangulateShape(n,D),M=n;B=0;for(y=D.length;B<y;B++)A=D[B],n=n.concat(A);var N,J,G,z,O,R=n.length,P,Q=L.length,s=[],F=0;G=M.length;N=G-1;for(J=F+1;F<G;F++,N++,J++)N===G&&(N=0),J===G&&(J=0),s[F]=d(M[F],M[N],M[J]);var U=[],V,X=s.concat();B=0;for(y=D.length;B<y;B++){A=D[B];V=[];F=0;G=A.length;N=G-1;for(J=F+1;F<G;F++,N++,J++)N===G&&(N=0),J===G&&(J=0),V[F]=d(A[F],A[N],A[J]);U.push(V);X=X.concat(V)}for(N=
+0;N<m;N++){G=N/m;z=l*(1-G);J=k*Math.sin(G*Math.PI/2);F=0;for(G=M.length;F<G;F++)O=c(M[F],s[F],J),f(O.x,O.y,-z);B=0;for(y=D.length;B<y;B++)for(A=D[B],V=U[B],F=0,G=A.length;F<G;F++)O=c(A[F],V[F],J),f(O.x,O.y,-z)}J=k;for(F=0;F<R;F++)O=q?c(n[F],X[F],J):n[F],v?(x.copy(w.normals[0]).multiplyScalar(O.x),E.copy(w.binormals[0]).multiplyScalar(O.y),C.copy(t[0]).add(x).add(E),f(C.x,C.y,C.z)):f(O.x,O.y,0);for(G=1;G<=p;G++)for(F=0;F<R;F++)O=q?c(n[F],X[F],J):n[F],v?(x.copy(w.normals[G]).multiplyScalar(O.x),E.copy(w.binormals[G]).multiplyScalar(O.y),
+C.copy(t[G]).add(x).add(E),f(C.x,C.y,C.z)):f(O.x,O.y,h/p*G);for(N=m-1;0<=N;N--){G=N/m;z=l*(1-G);J=k*Math.sin(G*Math.PI/2);F=0;for(G=M.length;F<G;F++)O=c(M[F],s[F],J),f(O.x,O.y,h+z);B=0;for(y=D.length;B<y;B++)for(A=D[B],V=U[B],F=0,G=A.length;F<G;F++)O=c(A[F],V[F],J),v?f(O.x,O.y+t[p-1].y,t[p-1].x+z):f(O.x,O.y,h+z)}(function(){if(q){var a;a=0*R;for(F=0;F<Q;F++)P=L[F],g(P[2]+a,P[1]+a,P[0]+a);a=p+2*m;a*=R;for(F=0;F<Q;F++)P=L[F],g(P[0]+a,P[1]+a,P[2]+a)}else{for(F=0;F<Q;F++)P=L[F],g(P[2],P[1],P[0]);for(F=
 0;F<Q;F++)P=L[F],g(P[0]+R*p,P[1]+R*p,P[2]+R*p)}})();(function(){var a=0;e(M,a);a+=M.length;B=0;for(y=D.length;B<y;B++)A=D[B],e(A,a),a+=A.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};