Parcourir la source

Fixed handling of doubleSided / flipSided in DepthPassPlugin.

alteredq il y a 13 ans
Parent
commit
7b7947d8a3

+ 30 - 30
build/Three.js

@@ -78,12 +78,12 @@ THREE.Projector=function(){function a(a,c){g=0;C.objects.length=0;C.sprites.leng
 THREE.Light&&C.lights.push(a);for(var c=0,d=a.children.length;c<d;c++)e(a.children[c])}};e(a);c===true&&C.objects.sort(d);return C}function b(){var a;if(g===h.length){a=new THREE.RenderableObject;h.push(a)}else a=h[g];g++;return a}function c(){var a;if(j===l.length){a=new THREE.RenderableVertex;l.push(a)}else a=l[j];j++;return a}function d(a,b){return b.z-a.z}function e(a,b){var c=0,d=1,f=a.z+a.w,e=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(f>=0&&e>=0&&g>=0&&h>=0)return true;if(f<0&&e<0||g<0&&h<0)return false;
 f<0?c=Math.max(c,f/(f-e)):e<0&&(d=Math.min(d,f/(f-e)));g<0?c=Math.max(c,g/(g-h)):h<0&&(d=Math.min(d,g/(g-h)));if(d<c)return false;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return true}var f,g,h=[],i,j,l=[],m,n,p=[],r,o=[],q,s,x=[],t,w,z=[],C={objects:[],sprites:[],lights:[],elements:[]},E=new THREE.Vector3,A=new THREE.Vector4,u=new THREE.Matrix4,H=new THREE.Matrix4,J=new THREE.Frustum,M=new THREE.Vector4,O=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);u.multiply(b.projectionMatrix,
 b.matrixWorldInverse);u.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);u.multiply(b.matrixWorld,b.projectionMatrixInverse);u.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(b,f,g){var h=f.near,F=f.far,E=false,X,N,Z,ca,I,da,ia,W,U,P,Y,ga,na,Ha,
-oa;w=s=r=n=0;C.elements.length=0;if(f.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");b.add(f)}b.updateMatrixWorld();f.matrixWorldInverse.getInverse(f.matrixWorld);u.multiply(f.projectionMatrix,f.matrixWorldInverse);J.setFromMatrix(u);C=a(b,false);b=0;for(X=C.objects.length;b<X;b++){U=C.objects[b].object;P=U.matrixWorld;j=0;if(U instanceof THREE.Mesh){Y=U.geometry;ga=U.geometry.materials;ca=Y.vertices;na=Y.faces;Ha=Y.faceVertexUvs;Y=U.matrixRotationWorld.extractRotation(P);
-N=0;for(Z=ca.length;N<Z;N++){i=c();i.positionWorld.copy(ca[N]);P.multiplyVector3(i.positionWorld);i.positionScreen.copy(i.positionWorld);u.multiplyVector4(i.positionScreen);i.positionScreen.x=i.positionScreen.x/i.positionScreen.w;i.positionScreen.y=i.positionScreen.y/i.positionScreen.w;i.visible=i.positionScreen.z>h&&i.positionScreen.z<F}ca=0;for(N=na.length;ca<N;ca++){Z=na[ca];if(Z instanceof THREE.Face3){I=l[Z.a];da=l[Z.b];ia=l[Z.c];if(I.visible===true&&da.visible===true&&ia.visible===true){E=(ia.positionScreen.x-
-I.positionScreen.x)*(da.positionScreen.y-I.positionScreen.y)-(ia.positionScreen.y-I.positionScreen.y)*(da.positionScreen.x-I.positionScreen.x)<0;if(U.doubleSided===true||E!==U.flipSided){W=void 0;if(n===p.length){W=new THREE.RenderableFace3;p.push(W)}else W=p[n];n++;m=W;m.v1.copy(I);m.v2.copy(da);m.v3.copy(ia)}else continue}else continue}else if(Z instanceof THREE.Face4){I=l[Z.a];da=l[Z.b];ia=l[Z.c];W=l[Z.d];if(I.visible===true&&da.visible===true&&ia.visible===true&&W.visible===true){E=(W.positionScreen.x-
-I.positionScreen.x)*(da.positionScreen.y-I.positionScreen.y)-(W.positionScreen.y-I.positionScreen.y)*(da.positionScreen.x-I.positionScreen.x)<0||(da.positionScreen.x-ia.positionScreen.x)*(W.positionScreen.y-ia.positionScreen.y)-(da.positionScreen.y-ia.positionScreen.y)*(W.positionScreen.x-ia.positionScreen.x)<0;if(U.doubleSided===true||E!==U.flipSided){oa=void 0;if(r===o.length){oa=new THREE.RenderableFace4;o.push(oa)}else oa=o[r];r++;m=oa;m.v1.copy(I);m.v2.copy(da);m.v3.copy(ia);m.v4.copy(W)}else continue}else continue}m.normalWorld.copy(Z.normal);
-E===false&&(U.flipSided===true||U.doubleSided===true)&&m.normalWorld.negate();Y.multiplyVector3(m.normalWorld);m.centroidWorld.copy(Z.centroid);P.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);u.multiplyVector3(m.centroidScreen);ia=Z.vertexNormals;I=0;for(da=ia.length;I<da;I++){W=m.vertexNormalsWorld[I];W.copy(ia[I]);E===false&&(U.flipSided===true||U.doubleSided===true)&&W.negate();Y.multiplyVector3(W)}I=0;for(da=Ha.length;I<da;I++){oa=Ha[I][ca];if(oa!==void 0){ia=0;for(W=
-oa.length;ia<W;ia++)m.uvs[I][ia]=oa[ia]}}m.material=U.material;m.faceMaterial=Z.materialIndex!==null?ga[Z.materialIndex]:null;m.z=m.centroidScreen.z;C.elements.push(m)}}else if(U instanceof THREE.Line){H.multiply(u,P);ca=U.geometry.vertices;I=c();I.positionScreen.copy(ca[0]);H.multiplyVector4(I.positionScreen);P=U.type===THREE.LinePieces?2:1;N=1;for(Z=ca.length;N<Z;N++){I=c();I.positionScreen.copy(ca[N]);H.multiplyVector4(I.positionScreen);if(!((N+1)%P>0)){da=l[j-2];M.copy(I.positionScreen);O.copy(da.positionScreen);
+oa;w=s=r=n=0;C.elements.length=0;b.updateMatrixWorld();f.parent===void 0&&f.updateMatrixWorld();f.matrixWorldInverse.getInverse(f.matrixWorld);u.multiply(f.projectionMatrix,f.matrixWorldInverse);J.setFromMatrix(u);C=a(b,false);b=0;for(X=C.objects.length;b<X;b++){U=C.objects[b].object;P=U.matrixWorld;j=0;if(U instanceof THREE.Mesh){Y=U.geometry;ga=U.geometry.materials;ca=Y.vertices;na=Y.faces;Ha=Y.faceVertexUvs;Y=U.matrixRotationWorld.extractRotation(P);N=0;for(Z=ca.length;N<Z;N++){i=c();i.positionWorld.copy(ca[N]);
+P.multiplyVector3(i.positionWorld);i.positionScreen.copy(i.positionWorld);u.multiplyVector4(i.positionScreen);i.positionScreen.x=i.positionScreen.x/i.positionScreen.w;i.positionScreen.y=i.positionScreen.y/i.positionScreen.w;i.visible=i.positionScreen.z>h&&i.positionScreen.z<F}ca=0;for(N=na.length;ca<N;ca++){Z=na[ca];if(Z instanceof THREE.Face3){I=l[Z.a];da=l[Z.b];ia=l[Z.c];if(I.visible===true&&da.visible===true&&ia.visible===true){E=(ia.positionScreen.x-I.positionScreen.x)*(da.positionScreen.y-I.positionScreen.y)-
+(ia.positionScreen.y-I.positionScreen.y)*(da.positionScreen.x-I.positionScreen.x)<0;if(U.doubleSided===true||E!==U.flipSided){W=void 0;if(n===p.length){W=new THREE.RenderableFace3;p.push(W)}else W=p[n];n++;m=W;m.v1.copy(I);m.v2.copy(da);m.v3.copy(ia)}else continue}else continue}else if(Z instanceof THREE.Face4){I=l[Z.a];da=l[Z.b];ia=l[Z.c];W=l[Z.d];if(I.visible===true&&da.visible===true&&ia.visible===true&&W.visible===true){E=(W.positionScreen.x-I.positionScreen.x)*(da.positionScreen.y-I.positionScreen.y)-
+(W.positionScreen.y-I.positionScreen.y)*(da.positionScreen.x-I.positionScreen.x)<0||(da.positionScreen.x-ia.positionScreen.x)*(W.positionScreen.y-ia.positionScreen.y)-(da.positionScreen.y-ia.positionScreen.y)*(W.positionScreen.x-ia.positionScreen.x)<0;if(U.doubleSided===true||E!==U.flipSided){oa=void 0;if(r===o.length){oa=new THREE.RenderableFace4;o.push(oa)}else oa=o[r];r++;m=oa;m.v1.copy(I);m.v2.copy(da);m.v3.copy(ia);m.v4.copy(W)}else continue}else continue}m.normalWorld.copy(Z.normal);E===false&&
+(U.flipSided===true||U.doubleSided===true)&&m.normalWorld.negate();Y.multiplyVector3(m.normalWorld);m.centroidWorld.copy(Z.centroid);P.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);u.multiplyVector3(m.centroidScreen);ia=Z.vertexNormals;I=0;for(da=ia.length;I<da;I++){W=m.vertexNormalsWorld[I];W.copy(ia[I]);E===false&&(U.flipSided===true||U.doubleSided===true)&&W.negate();Y.multiplyVector3(W)}I=0;for(da=Ha.length;I<da;I++){oa=Ha[I][ca];if(oa!==void 0){ia=0;for(W=oa.length;ia<
+W;ia++)m.uvs[I][ia]=oa[ia]}}m.material=U.material;m.faceMaterial=Z.materialIndex!==null?ga[Z.materialIndex]:null;m.z=m.centroidScreen.z;C.elements.push(m)}}else if(U instanceof THREE.Line){H.multiply(u,P);ca=U.geometry.vertices;I=c();I.positionScreen.copy(ca[0]);H.multiplyVector4(I.positionScreen);P=U.type===THREE.LinePieces?2:1;N=1;for(Z=ca.length;N<Z;N++){I=c();I.positionScreen.copy(ca[N]);H.multiplyVector4(I.positionScreen);if(!((N+1)%P>0)){da=l[j-2];M.copy(I.positionScreen);O.copy(da.positionScreen);
 if(e(M,O)===true){M.multiplyScalar(1/M.w);O.multiplyScalar(1/O.w);ga=void 0;if(s===x.length){ga=new THREE.RenderableLine;x.push(ga)}else ga=x[s];s++;q=ga;q.v1.positionScreen.copy(M);q.v2.positionScreen.copy(O);q.z=Math.max(M.z,O.z);q.material=U.material;C.elements.push(q)}}}}}b=0;for(X=C.sprites.length;b<X;b++){U=C.sprites[b].object;P=U.matrixWorld;if(U instanceof THREE.Particle){A.set(P.elements[12],P.elements[13],P.elements[14],1);u.multiplyVector4(A);A.z=A.z/A.w;if(A.z>0&&A.z<1){h=void 0;if(w===
 z.length){h=new THREE.RenderableParticle;z.push(h)}else h=z[w];w++;t=h;t.object=U;t.x=A.x/A.w;t.y=A.y/A.w;t.z=A.z;t.rotation=U.rotation.z;t.scale.x=U.scale.x*Math.abs(t.x-(A.x+f.projectionMatrix.elements[0])/(A.w+f.projectionMatrix.elements[12]));t.scale.y=U.scale.y*Math.abs(t.y-(A.y+f.projectionMatrix.elements[5])/(A.w+f.projectionMatrix.elements[13]));t.material=U.material;C.elements.push(t)}}}g&&C.elements.sort(d);return C}};
 THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1};
@@ -368,28 +368,28 @@ e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.no
 if(b.uv2>=0)if(e.__webglUV2Buffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer);k.vertexAttribPointer(b.uv2,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv2)}else k.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexABuffer);k.vertexAttribPointer(b.skinVertexA,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinVertexBBuffer);k.vertexAttribPointer(b.skinVertexB,4,k.FLOAT,
 false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,false,0,0);k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==nb){k.lineWidth(d);nb=d}a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,0)}else{a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);
 k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)}F.info.render.calls++;F.info.render.vertices=F.info.render.vertices+e.__webglFaceCount;F.info.render.faces=F.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES;d=d.linewidth;if(d!==nb){k.lineWidth(d);nb=d}k.drawArrays(f,0,e.__webglLineCount);F.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);F.info.render.calls++;
-F.info.render.points=F.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);F.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,h,m,n=a.__lights,o=a.fog;ca=-1;Ta=true;if(b.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");a.add(b)}this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=
-new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);ta.multiply(b.projectionMatrix,b.matrixWorldInverse);Ea.setFromMatrix(ta);this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;F.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,
-this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;for(e=m.length;d<e;d++){f=m[d];h=f.object;f.render=false;if(h.visible&&(!(h instanceof THREE.Mesh||h instanceof THREE.ParticleSystem)||!h.frustumCulled||Ea.contains(h))){s(h,b);var p=f,r=p.object,q=p.buffer,u=void 0,u=u=void 0,u=r.material;if(u instanceof THREE.MeshFaceMaterial){u=q.materialIndex;if(u>=0){u=r.geometry.materials[u];if(u.transparent){p.transparent=u;p.opaque=null}else{p.opaque=u;p.transparent=null}}}else if(u)if(u.transparent){p.transparent=
-u;p.opaque=null}else{p.opaque=u;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{ra.copy(h.matrixWorld.getPosition());ta.multiplyVector3(ra);f.z=ra.z}}}this.sortObjects&&m.sort(g);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];h=f.object;if(h.visible){s(h,b);h=f.object.material;if(h.transparent){f.transparent=h;f.opaque=null}else{f.opaque=h;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,
-d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);this.setDepthWrite(d.depthWrite);x(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);j(a.__webglObjects,false,"",b,n,o,true,d);l(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);j(a.__webglObjects,true,"opaque",b,n,o,false);l(a.__webglObjectsImmediate,"opaque",b,n,o,false);j(a.__webglObjects,false,"transparent",b,n,o,true);l(a.__webglObjectsImmediate,"transparent",b,n,o,true)}i(this.renderPluginsPost,
-a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture);k.generateMipmap(k.TEXTURE_CUBE_MAP);k.bindTexture(k.TEXTURE_CUBE_MAP,null)}else{k.bindTexture(k.TEXTURE_2D,c.__webglTexture);k.generateMipmap(k.TEXTURE_2D);k.bindTexture(k.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=q(a,b,c,d,e);I=
--1;F.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,k,Ea):e.render(function(a){F.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var g=a.__objectsAdded[0],h=a,i=void 0,j=void 0,l=void 0;if(!g.__webglInit){g.__webglInit=true;g._modelViewMatrix=new THREE.Matrix4;g._normalMatrix=new THREE.Matrix3;if(g instanceof THREE.Mesh){j=
-g.geometry;if(j instanceof THREE.Geometry){if(j.geometryGroups===void 0){var q=j,s=void 0,u=void 0,t=void 0,w=void 0,x=void 0,z=void 0,A=void 0,C={},E=q.morphTargets.length,B=q.morphNormals.length;q.geometryGroups={};s=0;for(u=q.faces.length;s<u;s++){t=q.faces[s];w=t.materialIndex;z=w!==void 0?w:-1;C[z]===void 0&&(C[z]={hash:z,counter:0});A=C[z].hash+"_"+C[z].counter;q.geometryGroups[A]===void 0&&(q.geometryGroups[A]={faces3:[],faces4:[],materialIndex:w,vertices:0,numMorphTargets:E,numMorphNormals:B});
-x=t instanceof THREE.Face3?3:4;if(q.geometryGroups[A].vertices+x>65535){C[z].counter=C[z].counter+1;A=C[z].hash+"_"+C[z].counter;q.geometryGroups[A]===void 0&&(q.geometryGroups[A]={faces3:[],faces4:[],materialIndex:w,vertices:0,numMorphTargets:E,numMorphNormals:B})}t instanceof THREE.Face3?q.geometryGroups[A].faces3.push(s):q.geometryGroups[A].faces4.push(s);q.geometryGroups[A].vertices=q.geometryGroups[A].vertices+x}q.geometryGroupsList=[];var U=void 0;for(U in q.geometryGroups){q.geometryGroups[U].id=
-ia++;q.geometryGroupsList.push(q.geometryGroups[U])}}for(i in j.geometryGroups){l=j.geometryGroups[i];if(!l.__webglVertexBuffer){var I=l;I.__webglVertexBuffer=k.createBuffer();I.__webglNormalBuffer=k.createBuffer();I.__webglTangentBuffer=k.createBuffer();I.__webglColorBuffer=k.createBuffer();I.__webglUVBuffer=k.createBuffer();I.__webglUV2Buffer=k.createBuffer();I.__webglSkinVertexABuffer=k.createBuffer();I.__webglSkinVertexBBuffer=k.createBuffer();I.__webglSkinIndicesBuffer=k.createBuffer();I.__webglSkinWeightsBuffer=
-k.createBuffer();I.__webglFaceBuffer=k.createBuffer();I.__webglLineBuffer=k.createBuffer();var H=void 0,P=void 0;if(I.numMorphTargets){I.__webglMorphTargetsBuffers=[];H=0;for(P=I.numMorphTargets;H<P;H++)I.__webglMorphTargetsBuffers.push(k.createBuffer())}if(I.numMorphNormals){I.__webglMorphNormalsBuffers=[];H=0;for(P=I.numMorphNormals;H<P;H++)I.__webglMorphNormalsBuffers.push(k.createBuffer())}F.info.memory.geometries++;var G=l,J=g,Y=J.geometry,M=G.faces3,N=G.faces4,O=M.length*3+N.length*4,Z=M.length*
-1+N.length*2,W=M.length*3+N.length*4,Q=c(J,G),$=e(Q),X=d(Q),ca=Q.vertexColors?Q.vertexColors:false;G.__vertexArray=new Float32Array(O*3);if(X)G.__normalArray=new Float32Array(O*3);if(Y.hasTangents)G.__tangentArray=new Float32Array(O*4);if(ca)G.__colorArray=new Float32Array(O*3);if($){if(Y.faceUvs.length>0||Y.faceVertexUvs.length>0)G.__uvArray=new Float32Array(O*2);if(Y.faceUvs.length>1||Y.faceVertexUvs.length>1)G.__uv2Array=new Float32Array(O*2)}if(J.geometry.skinWeights.length&&J.geometry.skinIndices.length){G.__skinVertexAArray=
-new Float32Array(O*4);G.__skinVertexBArray=new Float32Array(O*4);G.__skinIndexArray=new Float32Array(O*4);G.__skinWeightArray=new Float32Array(O*4)}G.__faceArray=new Uint16Array(Z*3);G.__lineArray=new Uint16Array(W*2);var ga=void 0,da=void 0;if(G.numMorphTargets){G.__morphTargetsArrays=[];ga=0;for(da=G.numMorphTargets;ga<da;ga++)G.__morphTargetsArrays.push(new Float32Array(O*3))}if(G.numMorphNormals){G.__morphNormalsArrays=[];ga=0;for(da=G.numMorphNormals;ga<da;ga++)G.__morphNormalsArrays.push(new Float32Array(O*
-3))}G.__webglFaceCount=Z*3;G.__webglLineCount=W*2;if(Q.attributes){if(G.__webglCustomAttributesList===void 0)G.__webglCustomAttributesList=[];var ba=void 0;for(ba in Q.attributes){var oa=Q.attributes[ba],na={},bb;for(bb in oa)na[bb]=oa[bb];if(!na.__webglInitialized||na.createUniqueBuffers){na.__webglInitialized=true;var Ha=1;na.type==="v2"?Ha=2:na.type==="v3"?Ha=3:na.type==="v4"?Ha=4:na.type==="c"&&(Ha=3);na.size=Ha;na.array=new Float32Array(O*Ha);na.buffer=k.createBuffer();na.buffer.belongsToAttribute=
-ba;oa.needsUpdate=true;na.__original=oa}G.__webglCustomAttributesList.push(na)}}G.__inittedArrays=true;j.verticesNeedUpdate=true;j.morphTargetsNeedUpdate=true;j.elementsNeedUpdate=true;j.uvsNeedUpdate=true;j.normalsNeedUpdate=true;j.tangentsNeedUpdate=true;j.colorsNeedUpdate=true}}}else if(j instanceof THREE.BufferGeometry){var Pa=j,Qa=void 0,ra=void 0,ta=void 0;for(Qa in Pa.attributes){ta=Qa==="index"?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER;ra=Pa.attributes[Qa];ra.buffer=k.createBuffer();k.bindBuffer(ta,
-ra.buffer);k.bufferData(ta,ra.array,k.STATIC_DRAW)}}}else if(g instanceof THREE.Ribbon){j=g.geometry;if(!j.__webglVertexBuffer){var Aa=j;Aa.__webglVertexBuffer=k.createBuffer();Aa.__webglColorBuffer=k.createBuffer();F.info.memory.geometries++;var Ea=j,Ga=Ea.vertices.length;Ea.__vertexArray=new Float32Array(Ga*3);Ea.__colorArray=new Float32Array(Ga*3);Ea.__webglVertexCount=Ga;j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.Line){j=g.geometry;if(!j.__webglVertexBuffer){var nb=
-j;nb.__webglVertexBuffer=k.createBuffer();nb.__webglColorBuffer=k.createBuffer();F.info.memory.geometries++;var gb=j,Wa=g,Ta=gb.vertices.length;gb.__vertexArray=new Float32Array(Ta*3);gb.__colorArray=new Float32Array(Ta*3);gb.__webglLineCount=Ta;b(gb,Wa);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.ParticleSystem){j=g.geometry;if(!j.__webglVertexBuffer){var Za=j;Za.__webglVertexBuffer=k.createBuffer();Za.__webglColorBuffer=k.createBuffer();F.info.geometries++;var Sa=
-j,Ob=g,ob=Sa.vertices.length;Sa.__vertexArray=new Float32Array(ob*3);Sa.__colorArray=new Float32Array(ob*3);Sa.__sortArray=[];Sa.__webglParticleCount=ob;b(Sa,Ob);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}}if(!g.__webglActive){if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.BufferGeometry)m(h.__webglObjects,j,g);else for(i in j.geometryGroups){l=j.geometryGroups[i];m(h.__webglObjects,l,g)}}else if(g instanceof THREE.Ribbon||g instanceof THREE.Line||g instanceof THREE.ParticleSystem){j=
-g.geometry;m(h.__webglObjects,j,g)}else g instanceof THREE.ImmediateRenderObject||g.immediateRenderCallback?h.__webglObjectsImmediate.push({object:g,opaque:null,transparent:null}):g instanceof THREE.Sprite?h.__webglSprites.push(g):g instanceof THREE.LensFlare&&h.__webglFlares.push(g);g.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var db=a.__objectsRemoved[0],kb=a;db instanceof THREE.Mesh||db instanceof THREE.ParticleSystem||db instanceof THREE.Ribbon||db instanceof
-THREE.Line?r(kb.__webglObjects,db):db instanceof THREE.Sprite?o(kb.__webglSprites,db):db instanceof THREE.LensFlare?o(kb.__webglFlares,db):(db instanceof THREE.ImmediateRenderObject||db.immediateRenderCallback)&&r(kb.__webglObjectsImmediate,db);db.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var hb=0,pb=a.__webglObjects.length;hb<pb;hb++){var lb=a.__webglObjects[hb].object,ea=lb.geometry,cb=void 0,oc=void 0,Xa=void 0;if(lb instanceof THREE.Mesh)if(ea instanceof THREE.BufferGeometry){if(ea.verticesNeedUpdate||
-ea.elementsNeedUpdate||ea.uvsNeedUpdate||ea.normalsNeedUpdate||ea.colorsNeedUpdate||ea.tangentsNeedUpdate){var Ib=ea,pc=k.DYNAMIC_DRAW,ec=!ea.dynamic,qc=Ib.attributes,Gb=qc.index,dc=qc.position,Yc=qc.normal,Zc=qc.uv,$c=qc.color,ad=qc.tangent;if(Ib.elementsNeedUpdate&&Gb!==void 0){k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,Gb.buffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Gb.array,pc)}if(Ib.verticesNeedUpdate&&dc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,dc.buffer);k.bufferData(k.ARRAY_BUFFER,dc.array,pc)}if(Ib.normalsNeedUpdate&&
-Yc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,Yc.buffer);k.bufferData(k.ARRAY_BUFFER,Yc.array,pc)}if(Ib.uvsNeedUpdate&&Zc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,Zc.buffer);k.bufferData(k.ARRAY_BUFFER,Zc.array,pc)}if(Ib.colorsNeedUpdate&&$c!==void 0){k.bindBuffer(k.ARRAY_BUFFER,$c.buffer);k.bufferData(k.ARRAY_BUFFER,$c.array,pc)}if(Ib.tangentsNeedUpdate&&ad!==void 0){k.bindBuffer(k.ARRAY_BUFFER,ad.buffer);k.bufferData(k.ARRAY_BUFFER,ad.array,pc)}if(ec){var md=void 0;for(md in Ib.attributes)delete Ib.attributes[md].array}}ea.verticesNeedUpdate=
+F.info.render.points=F.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);F.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,h,m,n=a.__lights,o=a.fog;ca=-1;Ta=true;this.autoUpdateScene&&a.updateMatrixWorld();b.parent===void 0&&b.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);
+b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);ta.multiply(b.projectionMatrix,b.matrixWorldInverse);Ea.setFromMatrix(ta);this.autoUpdateObjects&&this.initWebGLObjects(a);i(this.renderPluginsPre,a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;F.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;
+for(e=m.length;d<e;d++){f=m[d];h=f.object;f.render=false;if(h.visible&&(!(h instanceof THREE.Mesh||h instanceof THREE.ParticleSystem)||!h.frustumCulled||Ea.contains(h))){s(h,b);var p=f,r=p.object,q=p.buffer,u=void 0,u=u=void 0,u=r.material;if(u instanceof THREE.MeshFaceMaterial){u=q.materialIndex;if(u>=0){u=r.geometry.materials[u];if(u.transparent){p.transparent=u;p.opaque=null}else{p.opaque=u;p.transparent=null}}}else if(u)if(u.transparent){p.transparent=u;p.opaque=null}else{p.opaque=u;p.transparent=
+null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{ra.copy(h.matrixWorld.getPosition());ta.multiplyVector3(ra);f.z=ra.z}}}this.sortObjects&&m.sort(g);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];h=f.object;if(h.visible){s(h,b);h=f.object.material;if(h.transparent){f.transparent=h;f.opaque=null}else{f.opaque=h;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);
+this.setDepthWrite(d.depthWrite);x(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);j(a.__webglObjects,false,"",b,n,o,true,d);l(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);j(a.__webglObjects,true,"opaque",b,n,o,false);l(a.__webglObjectsImmediate,"opaque",b,n,o,false);j(a.__webglObjects,false,"transparent",b,n,o,true);l(a.__webglObjectsImmediate,"transparent",b,n,o,true)}i(this.renderPluginsPost,a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&
+c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture);k.generateMipmap(k.TEXTURE_CUBE_MAP);k.bindTexture(k.TEXTURE_CUBE_MAP,null)}else{k.bindTexture(k.TEXTURE_2D,c.__webglTexture);k.generateMipmap(k.TEXTURE_2D);k.bindTexture(k.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=q(a,b,c,d,e);I=-1;F.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,
+k,Ea):e.render(function(a){F.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var g=a.__objectsAdded[0],h=a,i=void 0,j=void 0,l=void 0;if(!g.__webglInit){g.__webglInit=true;g._modelViewMatrix=new THREE.Matrix4;g._normalMatrix=new THREE.Matrix3;if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.Geometry){if(j.geometryGroups===void 0){var q=
+j,s=void 0,u=void 0,t=void 0,w=void 0,x=void 0,z=void 0,A=void 0,C={},E=q.morphTargets.length,B=q.morphNormals.length;q.geometryGroups={};s=0;for(u=q.faces.length;s<u;s++){t=q.faces[s];w=t.materialIndex;z=w!==void 0?w:-1;C[z]===void 0&&(C[z]={hash:z,counter:0});A=C[z].hash+"_"+C[z].counter;q.geometryGroups[A]===void 0&&(q.geometryGroups[A]={faces3:[],faces4:[],materialIndex:w,vertices:0,numMorphTargets:E,numMorphNormals:B});x=t instanceof THREE.Face3?3:4;if(q.geometryGroups[A].vertices+x>65535){C[z].counter=
+C[z].counter+1;A=C[z].hash+"_"+C[z].counter;q.geometryGroups[A]===void 0&&(q.geometryGroups[A]={faces3:[],faces4:[],materialIndex:w,vertices:0,numMorphTargets:E,numMorphNormals:B})}t instanceof THREE.Face3?q.geometryGroups[A].faces3.push(s):q.geometryGroups[A].faces4.push(s);q.geometryGroups[A].vertices=q.geometryGroups[A].vertices+x}q.geometryGroupsList=[];var U=void 0;for(U in q.geometryGroups){q.geometryGroups[U].id=ia++;q.geometryGroupsList.push(q.geometryGroups[U])}}for(i in j.geometryGroups){l=
+j.geometryGroups[i];if(!l.__webglVertexBuffer){var I=l;I.__webglVertexBuffer=k.createBuffer();I.__webglNormalBuffer=k.createBuffer();I.__webglTangentBuffer=k.createBuffer();I.__webglColorBuffer=k.createBuffer();I.__webglUVBuffer=k.createBuffer();I.__webglUV2Buffer=k.createBuffer();I.__webglSkinVertexABuffer=k.createBuffer();I.__webglSkinVertexBBuffer=k.createBuffer();I.__webglSkinIndicesBuffer=k.createBuffer();I.__webglSkinWeightsBuffer=k.createBuffer();I.__webglFaceBuffer=k.createBuffer();I.__webglLineBuffer=
+k.createBuffer();var H=void 0,P=void 0;if(I.numMorphTargets){I.__webglMorphTargetsBuffers=[];H=0;for(P=I.numMorphTargets;H<P;H++)I.__webglMorphTargetsBuffers.push(k.createBuffer())}if(I.numMorphNormals){I.__webglMorphNormalsBuffers=[];H=0;for(P=I.numMorphNormals;H<P;H++)I.__webglMorphNormalsBuffers.push(k.createBuffer())}F.info.memory.geometries++;var G=l,J=g,Y=J.geometry,M=G.faces3,N=G.faces4,O=M.length*3+N.length*4,Z=M.length*1+N.length*2,W=M.length*3+N.length*4,Q=c(J,G),$=e(Q),X=d(Q),ca=Q.vertexColors?
+Q.vertexColors:false;G.__vertexArray=new Float32Array(O*3);if(X)G.__normalArray=new Float32Array(O*3);if(Y.hasTangents)G.__tangentArray=new Float32Array(O*4);if(ca)G.__colorArray=new Float32Array(O*3);if($){if(Y.faceUvs.length>0||Y.faceVertexUvs.length>0)G.__uvArray=new Float32Array(O*2);if(Y.faceUvs.length>1||Y.faceVertexUvs.length>1)G.__uv2Array=new Float32Array(O*2)}if(J.geometry.skinWeights.length&&J.geometry.skinIndices.length){G.__skinVertexAArray=new Float32Array(O*4);G.__skinVertexBArray=
+new Float32Array(O*4);G.__skinIndexArray=new Float32Array(O*4);G.__skinWeightArray=new Float32Array(O*4)}G.__faceArray=new Uint16Array(Z*3);G.__lineArray=new Uint16Array(W*2);var ga=void 0,da=void 0;if(G.numMorphTargets){G.__morphTargetsArrays=[];ga=0;for(da=G.numMorphTargets;ga<da;ga++)G.__morphTargetsArrays.push(new Float32Array(O*3))}if(G.numMorphNormals){G.__morphNormalsArrays=[];ga=0;for(da=G.numMorphNormals;ga<da;ga++)G.__morphNormalsArrays.push(new Float32Array(O*3))}G.__webglFaceCount=Z*3;
+G.__webglLineCount=W*2;if(Q.attributes){if(G.__webglCustomAttributesList===void 0)G.__webglCustomAttributesList=[];var ba=void 0;for(ba in Q.attributes){var oa=Q.attributes[ba],na={},bb;for(bb in oa)na[bb]=oa[bb];if(!na.__webglInitialized||na.createUniqueBuffers){na.__webglInitialized=true;var Ha=1;na.type==="v2"?Ha=2:na.type==="v3"?Ha=3:na.type==="v4"?Ha=4:na.type==="c"&&(Ha=3);na.size=Ha;na.array=new Float32Array(O*Ha);na.buffer=k.createBuffer();na.buffer.belongsToAttribute=ba;oa.needsUpdate=true;
+na.__original=oa}G.__webglCustomAttributesList.push(na)}}G.__inittedArrays=true;j.verticesNeedUpdate=true;j.morphTargetsNeedUpdate=true;j.elementsNeedUpdate=true;j.uvsNeedUpdate=true;j.normalsNeedUpdate=true;j.tangentsNeedUpdate=true;j.colorsNeedUpdate=true}}}else if(j instanceof THREE.BufferGeometry){var Pa=j,Qa=void 0,ra=void 0,ta=void 0;for(Qa in Pa.attributes){ta=Qa==="index"?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER;ra=Pa.attributes[Qa];ra.buffer=k.createBuffer();k.bindBuffer(ta,ra.buffer);k.bufferData(ta,
+ra.array,k.STATIC_DRAW)}}}else if(g instanceof THREE.Ribbon){j=g.geometry;if(!j.__webglVertexBuffer){var Aa=j;Aa.__webglVertexBuffer=k.createBuffer();Aa.__webglColorBuffer=k.createBuffer();F.info.memory.geometries++;var Ea=j,Ga=Ea.vertices.length;Ea.__vertexArray=new Float32Array(Ga*3);Ea.__colorArray=new Float32Array(Ga*3);Ea.__webglVertexCount=Ga;j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.Line){j=g.geometry;if(!j.__webglVertexBuffer){var nb=j;nb.__webglVertexBuffer=
+k.createBuffer();nb.__webglColorBuffer=k.createBuffer();F.info.memory.geometries++;var gb=j,Wa=g,Ta=gb.vertices.length;gb.__vertexArray=new Float32Array(Ta*3);gb.__colorArray=new Float32Array(Ta*3);gb.__webglLineCount=Ta;b(gb,Wa);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}else if(g instanceof THREE.ParticleSystem){j=g.geometry;if(!j.__webglVertexBuffer){var Za=j;Za.__webglVertexBuffer=k.createBuffer();Za.__webglColorBuffer=k.createBuffer();F.info.geometries++;var Sa=j,Ob=g,ob=Sa.vertices.length;
+Sa.__vertexArray=new Float32Array(ob*3);Sa.__colorArray=new Float32Array(ob*3);Sa.__sortArray=[];Sa.__webglParticleCount=ob;b(Sa,Ob);j.verticesNeedUpdate=true;j.colorsNeedUpdate=true}}}if(!g.__webglActive){if(g instanceof THREE.Mesh){j=g.geometry;if(j instanceof THREE.BufferGeometry)m(h.__webglObjects,j,g);else for(i in j.geometryGroups){l=j.geometryGroups[i];m(h.__webglObjects,l,g)}}else if(g instanceof THREE.Ribbon||g instanceof THREE.Line||g instanceof THREE.ParticleSystem){j=g.geometry;m(h.__webglObjects,
+j,g)}else g instanceof THREE.ImmediateRenderObject||g.immediateRenderCallback?h.__webglObjectsImmediate.push({object:g,opaque:null,transparent:null}):g instanceof THREE.Sprite?h.__webglSprites.push(g):g instanceof THREE.LensFlare&&h.__webglFlares.push(g);g.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var db=a.__objectsRemoved[0],kb=a;db instanceof THREE.Mesh||db instanceof THREE.ParticleSystem||db instanceof THREE.Ribbon||db instanceof THREE.Line?r(kb.__webglObjects,
+db):db instanceof THREE.Sprite?o(kb.__webglSprites,db):db instanceof THREE.LensFlare?o(kb.__webglFlares,db):(db instanceof THREE.ImmediateRenderObject||db.immediateRenderCallback)&&r(kb.__webglObjectsImmediate,db);db.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var hb=0,pb=a.__webglObjects.length;hb<pb;hb++){var lb=a.__webglObjects[hb].object,ea=lb.geometry,cb=void 0,oc=void 0,Xa=void 0;if(lb instanceof THREE.Mesh)if(ea instanceof THREE.BufferGeometry){if(ea.verticesNeedUpdate||ea.elementsNeedUpdate||
+ea.uvsNeedUpdate||ea.normalsNeedUpdate||ea.colorsNeedUpdate||ea.tangentsNeedUpdate){var Ib=ea,pc=k.DYNAMIC_DRAW,ec=!ea.dynamic,qc=Ib.attributes,Gb=qc.index,dc=qc.position,Yc=qc.normal,Zc=qc.uv,$c=qc.color,ad=qc.tangent;if(Ib.elementsNeedUpdate&&Gb!==void 0){k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,Gb.buffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Gb.array,pc)}if(Ib.verticesNeedUpdate&&dc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,dc.buffer);k.bufferData(k.ARRAY_BUFFER,dc.array,pc)}if(Ib.normalsNeedUpdate&&Yc!==
+void 0){k.bindBuffer(k.ARRAY_BUFFER,Yc.buffer);k.bufferData(k.ARRAY_BUFFER,Yc.array,pc)}if(Ib.uvsNeedUpdate&&Zc!==void 0){k.bindBuffer(k.ARRAY_BUFFER,Zc.buffer);k.bufferData(k.ARRAY_BUFFER,Zc.array,pc)}if(Ib.colorsNeedUpdate&&$c!==void 0){k.bindBuffer(k.ARRAY_BUFFER,$c.buffer);k.bufferData(k.ARRAY_BUFFER,$c.array,pc)}if(Ib.tangentsNeedUpdate&&ad!==void 0){k.bindBuffer(k.ARRAY_BUFFER,ad.buffer);k.bufferData(k.ARRAY_BUFFER,ad.array,pc)}if(ec){var md=void 0;for(md in Ib.attributes)delete Ib.attributes[md].array}}ea.verticesNeedUpdate=
 false;ea.elementsNeedUpdate=false;ea.uvsNeedUpdate=false;ea.normalsNeedUpdate=false;ea.colorsNeedUpdate=false;ea.tangentsNeedUpdate=false}else{for(var bd=0,yd=ea.geometryGroupsList.length;bd<yd;bd++){cb=ea.geometryGroupsList[bd];Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);if(ea.verticesNeedUpdate||ea.morphTargetsNeedUpdate||ea.elementsNeedUpdate||ea.uvsNeedUpdate||ea.normalsNeedUpdate||ea.colorsNeedUpdate||ea.tangentsNeedUpdate||oc){var ha=cb,zd=lb,$a=k.DYNAMIC_DRAW,Ad=!ea.dynamic,hc=Xa;if(ha.__inittedArrays){var nd=
 d(hc),cd=hc.vertexColors?hc.vertexColors:false,od=e(hc),Kc=nd===THREE.SmoothShading,D=void 0,V=void 0,jb=void 0,L=void 0,rc=void 0,Rb=void 0,mb=void 0,Lc=void 0,Jb=void 0,sc=void 0,tc=void 0,R=void 0,S=void 0,T=void 0,ja=void 0,qb=void 0,rb=void 0,sb=void 0,xc=void 0,tb=void 0,ub=void 0,vb=void 0,yc=void 0,wb=void 0,xb=void 0,yb=void 0,zc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Ac=void 0,Cb=void 0,Db=void 0,Eb=void 0,Bc=void 0,Sb=void 0,Tb=void 0,Ub=void 0,Mc=void 0,Vb=void 0,Wb=void 0,Xb=void 0,Nc=
 void 0,ma=void 0,pd=void 0,Yb=void 0,uc=void 0,vc=void 0,Ka=void 0,qd=void 0,Ia=void 0,Ja=void 0,Zb=void 0,Kb=void 0,Ba=0,Fa=0,Lb=0,Mb=0,eb=0,Ra=0,qa=0,Ua=0,Ca=0,K=0,fa=0,y=0,pa=void 0,La=ha.__vertexArray,Cc=ha.__uvArray,Dc=ha.__uv2Array,fb=ha.__normalArray,ua=ha.__tangentArray,Ma=ha.__colorArray,va=ha.__skinVertexAArray,wa=ha.__skinVertexBArray,xa=ha.__skinIndexArray,ya=ha.__skinWeightArray,dd=ha.__morphTargetsArrays,ed=ha.__morphNormalsArrays,fd=ha.__webglCustomAttributesList,v=void 0,Fb=ha.__faceArray,
@@ -754,8 +754,8 @@ b.uniform3f(s.screenPosition,(z.position.x-p)/p,(t-z.position.y)/t,Math.max(0,Ma
 b.uniform1f(s.opacity,z.opacity);b.uniform3f(s.color,z.color.r,z.color.g,z.color.b);b.uniform1f(s.rotation,z.rotation);b.uniform2fv(s.scale,C);if(z.mergeWith3D&&!w){b.enable(b.DEPTH_TEST);w=true}else if(!z.mergeWith3D&&w){b.disable(b.DEPTH_TEST);w=false}c.setBlending(z.blending,z.blendEquation,z.blendSrc,z.blendDst);c.setTexture(z.map,0);b.drawElements(b.TRIANGLES,6,b.UNSIGNED_SHORT,0)}}b.enable(b.CULL_FACE);b.enable(b.DEPTH_TEST);b.depthMask(true)}}};
 THREE.DepthPassPlugin=function(){this.enabled=false;this.renderTarget=null;var a,b,c,d,e=new THREE.Frustum,f=new THREE.Matrix4;this.init=function(e){a=e.context;b=e;var e=THREE.ShaderLib.depthRGBA,f=THREE.UniformsUtils.clone(e.uniforms);c=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f});d=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f,morphTargets:true});c._shadowPass=true;d._shadowPass=true};this.render=
 function(a,b){this.enabled&&this.update(a,b)};this.update=function(g,h){var i,j,l,m,n,p;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(true);b.autoUpdateScene&&g.updateMatrixWorld();if(!h._viewMatrixArray)h._viewMatrixArray=new Float32Array(16);if(!h._projectionMatrixArray)h._projectionMatrixArray=new Float32Array(16);h.matrixWorldInverse.getInverse(h.matrixWorld);h.matrixWorldInverse.flattenToArray(h._viewMatrixArray);h.projectionMatrix.flattenToArray(h._projectionMatrixArray);f.multiply(h.projectionMatrix,
-h.matrixWorldInverse);e.setFromMatrix(f);b.setRenderTarget(this.renderTarget);b.clear();p=g.__webglObjects;i=0;for(j=p.length;i<j;i++){l=p[i];n=l.object;l.render=false;if(n.visible&&(!(n instanceof THREE.Mesh)||!n.frustumCulled||e.contains(n))){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);l.render=true}}i=0;for(j=p.length;i<j;i++){l=p[i];if(l.render){n=l.object;l=l.buffer;b.setObjectFaces(n);m=n.customDepthMaterial?n.customDepthMaterial:n.geometry.morphTargets.length?d:c;l instanceof
-THREE.BufferGeometry?b.renderBufferDirect(h,g.__lights,null,m,l,n):b.renderBuffer(h,g.__lights,null,m,l,n)}}p=g.__webglObjectsImmediate;i=0;for(j=p.length;i<j;i++){l=p[i];n=l.object;if(n.visible&&n.castShadow){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);b.renderImmediateObject(h,g.__lights,null,c,n)}}i=b.getClearColor();j=b.getClearAlpha();a.clearColor(i.r,i.g,i.b,j);a.enable(a.BLEND)}};
+h.matrixWorldInverse);e.setFromMatrix(f);b.setRenderTarget(this.renderTarget);b.clear();p=g.__webglObjects;i=0;for(j=p.length;i<j;i++){l=p[i];n=l.object;l.render=false;if(n.visible&&(!(n instanceof THREE.Mesh)||!n.frustumCulled||e.contains(n))){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);l.render=true}}i=0;for(j=p.length;i<j;i++){l=p[i];if(l.render){n=l.object;l=l.buffer;n.material&&b.setMaterialFaces(n.material);m=n.customDepthMaterial?n.customDepthMaterial:n.geometry.morphTargets.length?
+d:c;l instanceof THREE.BufferGeometry?b.renderBufferDirect(h,g.__lights,null,m,l,n):b.renderBuffer(h,g.__lights,null,m,l,n)}}p=g.__webglObjectsImmediate;i=0;for(j=p.length;i<j;i++){l=p[i];n=l.object;if(n.visible&&n.castShadow){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);b.renderImmediateObject(h,g.__lights,null,c,n)}}i=b.getClearColor();j=b.getClearAlpha();a.clearColor(i.r,i.g,i.b,j);a.enable(a.BLEND)}};
 THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\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 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = (       visibility.r / 9.0 ) *\n( 1.0 - visibility.g / 9.0 ) *\n(       visibility.b / 9.0 ) *\n( 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:"precision mediump float;\nuniform sampler2D map;\nuniform float opacity;\nuniform int renderType;\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}"},
 lensFlare:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\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 sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform int renderType;\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 +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a +\ntexture2D( 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}"}};
 THREE.ShaderSprite={sprite:{vertexShader:"uniform int useScreenCoordinates;\nuniform int affectedByDistance;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position + alignment;\nvec2 rotatedPosition;\nrotatedPosition.x = ( cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y ) * scale.x;\nrotatedPosition.y = ( sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y ) * scale.y;\nvec4 finalPosition;\nif( useScreenCoordinates != 0 ) {\nfinalPosition = vec4( screenPosition.xy + rotatedPosition, screenPosition.z, 1.0 );\n} else {\nfinalPosition = projectionMatrix * modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition * ( affectedByDistance == 1 ? 1.0 : finalPosition.z );\n}\ngl_Position = finalPosition;\n}",

+ 8 - 9
build/custom/ThreeCanvas.js

@@ -77,15 +77,14 @@ THREE.Projector=function(){function a(a,c){g=0;A.objects.length=0;A.sprites.leng
 THREE.Light&&A.lights.push(a);for(var c=0,d=a.children.length;c<d;c++)f(a.children[c])}};f(a);c===true&&A.objects.sort(d);return A}function b(){var a;if(g===j.length){a=new THREE.RenderableObject;j.push(a)}else a=j[g];g++;return a}function c(){var a;if(k===h.length){a=new THREE.RenderableVertex;h.push(a)}else a=h[k];k++;return a}function d(a,b){return b.z-a.z}function f(a,b){var c=0,d=1,e=a.z+a.w,g=b.z+b.w,f=-a.z+a.w,h=-b.z+b.w;if(e>=0&&g>=0&&f>=0&&h>=0)return true;if(e<0&&g<0||f<0&&h<0)return false;
 e<0?c=Math.max(c,e/(e-g)):g<0&&(d=Math.min(d,e/(e-g)));f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h)));if(d<c)return false;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return true}var e,g,j=[],m,k,h=[],n,i,o=[],q,l=[],p,r,u=[],v,B,x=[],A={objects:[],sprites:[],lights:[],elements:[]},y=new THREE.Vector3,F=new THREE.Vector4,s=new THREE.Matrix4,w=new THREE.Matrix4,D=new THREE.Frustum,J=new THREE.Vector4,L=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);s.multiply(b.projectionMatrix,
 b.matrixWorldInverse);s.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);s.multiply(b.matrixWorld,b.projectionMatrixInverse);s.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(b,e,g){var j=e.near,y=e.far,Q=false,S,z,P,$,O,U,T,E,C,H,K,R,ja,ka,Y;
-B=r=q=i=0;A.elements.length=0;if(e.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");b.add(e)}b.updateMatrixWorld();e.matrixWorldInverse.getInverse(e.matrixWorld);s.multiply(e.projectionMatrix,e.matrixWorldInverse);D.setFromMatrix(s);A=a(b,false);b=0;for(S=A.objects.length;b<S;b++){C=A.objects[b].object;H=C.matrixWorld;k=0;if(C instanceof THREE.Mesh){K=C.geometry;R=C.geometry.materials;$=K.vertices;ja=K.faces;ka=K.faceVertexUvs;K=C.matrixRotationWorld.extractRotation(H);
-z=0;for(P=$.length;z<P;z++){m=c();m.positionWorld.copy($[z]);H.multiplyVector3(m.positionWorld);m.positionScreen.copy(m.positionWorld);s.multiplyVector4(m.positionScreen);m.positionScreen.x=m.positionScreen.x/m.positionScreen.w;m.positionScreen.y=m.positionScreen.y/m.positionScreen.w;m.visible=m.positionScreen.z>j&&m.positionScreen.z<y}$=0;for(z=ja.length;$<z;$++){P=ja[$];if(P instanceof THREE.Face3){O=h[P.a];U=h[P.b];T=h[P.c];if(O.visible===true&&U.visible===true&&T.visible===true){Q=(T.positionScreen.x-
-O.positionScreen.x)*(U.positionScreen.y-O.positionScreen.y)-(T.positionScreen.y-O.positionScreen.y)*(U.positionScreen.x-O.positionScreen.x)<0;if(C.doubleSided===true||Q!==C.flipSided){E=void 0;if(i===o.length){E=new THREE.RenderableFace3;o.push(E)}else E=o[i];i++;n=E;n.v1.copy(O);n.v2.copy(U);n.v3.copy(T)}else continue}else continue}else if(P instanceof THREE.Face4){O=h[P.a];U=h[P.b];T=h[P.c];E=h[P.d];if(O.visible===true&&U.visible===true&&T.visible===true&&E.visible===true){Q=(E.positionScreen.x-
-O.positionScreen.x)*(U.positionScreen.y-O.positionScreen.y)-(E.positionScreen.y-O.positionScreen.y)*(U.positionScreen.x-O.positionScreen.x)<0||(U.positionScreen.x-T.positionScreen.x)*(E.positionScreen.y-T.positionScreen.y)-(U.positionScreen.y-T.positionScreen.y)*(E.positionScreen.x-T.positionScreen.x)<0;if(C.doubleSided===true||Q!==C.flipSided){Y=void 0;if(q===l.length){Y=new THREE.RenderableFace4;l.push(Y)}else Y=l[q];q++;n=Y;n.v1.copy(O);n.v2.copy(U);n.v3.copy(T);n.v4.copy(E)}else continue}else continue}n.normalWorld.copy(P.normal);
-Q===false&&(C.flipSided===true||C.doubleSided===true)&&n.normalWorld.negate();K.multiplyVector3(n.normalWorld);n.centroidWorld.copy(P.centroid);H.multiplyVector3(n.centroidWorld);n.centroidScreen.copy(n.centroidWorld);s.multiplyVector3(n.centroidScreen);T=P.vertexNormals;O=0;for(U=T.length;O<U;O++){E=n.vertexNormalsWorld[O];E.copy(T[O]);Q===false&&(C.flipSided===true||C.doubleSided===true)&&E.negate();K.multiplyVector3(E)}O=0;for(U=ka.length;O<U;O++){Y=ka[O][$];if(Y!==void 0){T=0;for(E=Y.length;T<
-E;T++)n.uvs[O][T]=Y[T]}}n.material=C.material;n.faceMaterial=P.materialIndex!==null?R[P.materialIndex]:null;n.z=n.centroidScreen.z;A.elements.push(n)}}else if(C instanceof THREE.Line){w.multiply(s,H);$=C.geometry.vertices;O=c();O.positionScreen.copy($[0]);w.multiplyVector4(O.positionScreen);H=C.type===THREE.LinePieces?2:1;z=1;for(P=$.length;z<P;z++){O=c();O.positionScreen.copy($[z]);w.multiplyVector4(O.positionScreen);if(!((z+1)%H>0)){U=h[k-2];J.copy(O.positionScreen);L.copy(U.positionScreen);if(f(J,
-L)===true){J.multiplyScalar(1/J.w);L.multiplyScalar(1/L.w);R=void 0;if(r===u.length){R=new THREE.RenderableLine;u.push(R)}else R=u[r];r++;p=R;p.v1.positionScreen.copy(J);p.v2.positionScreen.copy(L);p.z=Math.max(J.z,L.z);p.material=C.material;A.elements.push(p)}}}}}b=0;for(S=A.sprites.length;b<S;b++){C=A.sprites[b].object;H=C.matrixWorld;if(C instanceof THREE.Particle){F.set(H.elements[12],H.elements[13],H.elements[14],1);s.multiplyVector4(F);F.z=F.z/F.w;if(F.z>0&&F.z<1){j=void 0;if(B===x.length){j=
-new THREE.RenderableParticle;x.push(j)}else j=x[B];B++;v=j;v.object=C;v.x=F.x/F.w;v.y=F.y/F.w;v.z=F.z;v.rotation=C.rotation.z;v.scale.x=C.scale.x*Math.abs(v.x-(F.x+e.projectionMatrix.elements[0])/(F.w+e.projectionMatrix.elements[12]));v.scale.y=C.scale.y*Math.abs(v.y-(F.y+e.projectionMatrix.elements[5])/(F.w+e.projectionMatrix.elements[13]));v.material=C.material;A.elements.push(v)}}}g&&A.elements.sort(d);return A}};
-THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1};
+B=r=q=i=0;A.elements.length=0;b.updateMatrixWorld();e.parent===void 0&&e.updateMatrixWorld();e.matrixWorldInverse.getInverse(e.matrixWorld);s.multiply(e.projectionMatrix,e.matrixWorldInverse);D.setFromMatrix(s);A=a(b,false);b=0;for(S=A.objects.length;b<S;b++){C=A.objects[b].object;H=C.matrixWorld;k=0;if(C instanceof THREE.Mesh){K=C.geometry;R=C.geometry.materials;$=K.vertices;ja=K.faces;ka=K.faceVertexUvs;K=C.matrixRotationWorld.extractRotation(H);z=0;for(P=$.length;z<P;z++){m=c();m.positionWorld.copy($[z]);
+H.multiplyVector3(m.positionWorld);m.positionScreen.copy(m.positionWorld);s.multiplyVector4(m.positionScreen);m.positionScreen.x=m.positionScreen.x/m.positionScreen.w;m.positionScreen.y=m.positionScreen.y/m.positionScreen.w;m.visible=m.positionScreen.z>j&&m.positionScreen.z<y}$=0;for(z=ja.length;$<z;$++){P=ja[$];if(P instanceof THREE.Face3){O=h[P.a];U=h[P.b];T=h[P.c];if(O.visible===true&&U.visible===true&&T.visible===true){Q=(T.positionScreen.x-O.positionScreen.x)*(U.positionScreen.y-O.positionScreen.y)-
+(T.positionScreen.y-O.positionScreen.y)*(U.positionScreen.x-O.positionScreen.x)<0;if(C.doubleSided===true||Q!==C.flipSided){E=void 0;if(i===o.length){E=new THREE.RenderableFace3;o.push(E)}else E=o[i];i++;n=E;n.v1.copy(O);n.v2.copy(U);n.v3.copy(T)}else continue}else continue}else if(P instanceof THREE.Face4){O=h[P.a];U=h[P.b];T=h[P.c];E=h[P.d];if(O.visible===true&&U.visible===true&&T.visible===true&&E.visible===true){Q=(E.positionScreen.x-O.positionScreen.x)*(U.positionScreen.y-O.positionScreen.y)-
+(E.positionScreen.y-O.positionScreen.y)*(U.positionScreen.x-O.positionScreen.x)<0||(U.positionScreen.x-T.positionScreen.x)*(E.positionScreen.y-T.positionScreen.y)-(U.positionScreen.y-T.positionScreen.y)*(E.positionScreen.x-T.positionScreen.x)<0;if(C.doubleSided===true||Q!==C.flipSided){Y=void 0;if(q===l.length){Y=new THREE.RenderableFace4;l.push(Y)}else Y=l[q];q++;n=Y;n.v1.copy(O);n.v2.copy(U);n.v3.copy(T);n.v4.copy(E)}else continue}else continue}n.normalWorld.copy(P.normal);Q===false&&(C.flipSided===
+true||C.doubleSided===true)&&n.normalWorld.negate();K.multiplyVector3(n.normalWorld);n.centroidWorld.copy(P.centroid);H.multiplyVector3(n.centroidWorld);n.centroidScreen.copy(n.centroidWorld);s.multiplyVector3(n.centroidScreen);T=P.vertexNormals;O=0;for(U=T.length;O<U;O++){E=n.vertexNormalsWorld[O];E.copy(T[O]);Q===false&&(C.flipSided===true||C.doubleSided===true)&&E.negate();K.multiplyVector3(E)}O=0;for(U=ka.length;O<U;O++){Y=ka[O][$];if(Y!==void 0){T=0;for(E=Y.length;T<E;T++)n.uvs[O][T]=Y[T]}}n.material=
+C.material;n.faceMaterial=P.materialIndex!==null?R[P.materialIndex]:null;n.z=n.centroidScreen.z;A.elements.push(n)}}else if(C instanceof THREE.Line){w.multiply(s,H);$=C.geometry.vertices;O=c();O.positionScreen.copy($[0]);w.multiplyVector4(O.positionScreen);H=C.type===THREE.LinePieces?2:1;z=1;for(P=$.length;z<P;z++){O=c();O.positionScreen.copy($[z]);w.multiplyVector4(O.positionScreen);if(!((z+1)%H>0)){U=h[k-2];J.copy(O.positionScreen);L.copy(U.positionScreen);if(f(J,L)===true){J.multiplyScalar(1/J.w);
+L.multiplyScalar(1/L.w);R=void 0;if(r===u.length){R=new THREE.RenderableLine;u.push(R)}else R=u[r];r++;p=R;p.v1.positionScreen.copy(J);p.v2.positionScreen.copy(L);p.z=Math.max(J.z,L.z);p.material=C.material;A.elements.push(p)}}}}}b=0;for(S=A.sprites.length;b<S;b++){C=A.sprites[b].object;H=C.matrixWorld;if(C instanceof THREE.Particle){F.set(H.elements[12],H.elements[13],H.elements[14],1);s.multiplyVector4(F);F.z=F.z/F.w;if(F.z>0&&F.z<1){j=void 0;if(B===x.length){j=new THREE.RenderableParticle;x.push(j)}else j=
+x[B];B++;v=j;v.object=C;v.x=F.x/F.w;v.y=F.y/F.w;v.z=F.z;v.rotation=C.rotation.z;v.scale.x=C.scale.x*Math.abs(v.x-(F.x+e.projectionMatrix.elements[0])/(F.w+e.projectionMatrix.elements[12]));v.scale.y=C.scale.y*Math.abs(v.y-(F.y+e.projectionMatrix.elements[5])/(F.w+e.projectionMatrix.elements[13]));v.material=C.material;A.elements.push(v)}}}g&&A.elements.sort(d);return A}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1};
 THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),f=Math.cos(a.z/2),e=Math.sin(a.x/2),g=Math.sin(a.y/2),j=Math.sin(a.z/2);if(b===void 0||b==="XYZ"){this.x=e*d*f+c*g*j;this.y=c*g*f-e*d*j;this.z=c*d*j+e*g*f;this.w=c*d*f-e*g*j}else if(b==="YXZ"){this.x=e*d*f+c*g*j;this.y=c*g*f-e*d*j;this.z=
 c*d*j-e*g*f;this.w=c*d*f+e*g*j}else if(b==="ZXY"){this.x=e*d*f-c*g*j;this.y=c*g*f+e*d*j;this.z=c*d*j+e*g*f;this.w=c*d*f-e*g*j}else if(b==="ZYX"){this.x=e*d*f-c*g*j;this.y=c*g*f+e*d*j;this.z=c*d*j-e*g*f;this.w=c*d*f+e*g*j}else if(b==="YZX"){this.x=e*d*f+c*g*j;this.y=c*g*f+e*d*j;this.z=c*d*j-e*g*f;this.w=c*d*f-e*g*j}else if(b==="XZY"){this.x=e*d*f-c*g*j;this.y=c*g*f-e*d*j;this.z=c*d*j+e*g*f;this.w=c*d*f+e*g*j}return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y*
 d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0],a=b[4],d=b[8],f=b[1],e=b[5],g=b[9],j=b[2],m=b[6],b=b[10],k=c+e+b;if(k>0){c=0.5/Math.sqrt(k+1);this.w=0.25/c;this.x=(m-g)*c;this.y=(d-j)*c;this.z=(f-a)*c}else if(c>e&&c>b){c=2*Math.sqrt(1+c-e-b);this.w=(m-g)/c;this.x=0.25*c;this.y=(a+f)/c;this.z=(d+j)/c}else if(e>b){c=2*Math.sqrt(1+e-c-b);this.w=(d-j)/c;this.x=(a+f)/c;this.y=0.25*c;this.z=(g+m)/c}else{c=2*Math.sqrt(1+b-c-e);this.w=(f-a)/c;this.x=

+ 2 - 2
build/custom/ThreeExtras.js

@@ -296,8 +296,8 @@ a.uniform3f(s.screenPosition,(v.position.x-k)/k,(t-v.position.y)/t,Math.max(0,Ma
 a.uniform1f(s.opacity,v.opacity);a.uniform3f(s.color,v.color.r,v.color.g,v.color.b);a.uniform1f(s.rotation,v.rotation);a.uniform2fv(s.scale,z);if(v.mergeWith3D&&!r){a.enable(a.DEPTH_TEST);r=true}else if(!v.mergeWith3D&&r){a.disable(a.DEPTH_TEST);r=false}c.setBlending(v.blending,v.blendEquation,v.blendSrc,v.blendDst);c.setTexture(v.map,0);a.drawElements(a.TRIANGLES,6,a.UNSIGNED_SHORT,0)}}a.enable(a.CULL_FACE);a.enable(a.DEPTH_TEST);a.depthMask(true)}}};
 THREE.DepthPassPlugin=function(){this.enabled=false;this.renderTarget=null;var b,a,c,d,e=new THREE.Frustum,f=new THREE.Matrix4;this.init=function(e){b=e.context;a=e;var e=THREE.ShaderLib.depthRGBA,f=THREE.UniformsUtils.clone(e.uniforms);c=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f});d=new THREE.ShaderMaterial({fragmentShader:e.fragmentShader,vertexShader:e.vertexShader,uniforms:f,morphTargets:true});c._shadowPass=true;d._shadowPass=true};this.render=
 function(a,b){this.enabled&&this.update(a,b)};this.update=function(g,h){var i,j,l,m,n,k;b.clearColor(1,1,1,1);b.disable(b.BLEND);a.setDepthTest(true);a.autoUpdateScene&&g.updateMatrixWorld();if(!h._viewMatrixArray)h._viewMatrixArray=new Float32Array(16);if(!h._projectionMatrixArray)h._projectionMatrixArray=new Float32Array(16);h.matrixWorldInverse.getInverse(h.matrixWorld);h.matrixWorldInverse.flattenToArray(h._viewMatrixArray);h.projectionMatrix.flattenToArray(h._projectionMatrixArray);f.multiply(h.projectionMatrix,
-h.matrixWorldInverse);e.setFromMatrix(f);a.setRenderTarget(this.renderTarget);a.clear();k=g.__webglObjects;i=0;for(j=k.length;i<j;i++){l=k[i];n=l.object;l.render=false;if(n.visible&&(!(n instanceof THREE.Mesh)||!n.frustumCulled||e.contains(n))){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);l.render=true}}i=0;for(j=k.length;i<j;i++){l=k[i];if(l.render){n=l.object;l=l.buffer;a.setObjectFaces(n);m=n.customDepthMaterial?n.customDepthMaterial:n.geometry.morphTargets.length?d:c;l instanceof
-THREE.BufferGeometry?a.renderBufferDirect(h,g.__lights,null,m,l,n):a.renderBuffer(h,g.__lights,null,m,l,n)}}k=g.__webglObjectsImmediate;i=0;for(j=k.length;i<j;i++){l=k[i];n=l.object;if(n.visible&&n.castShadow){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);a.renderImmediateObject(h,g.__lights,null,c,n)}}i=a.getClearColor();j=a.getClearAlpha();b.clearColor(i.r,i.g,i.b,j);b.enable(b.BLEND)}};
+h.matrixWorldInverse);e.setFromMatrix(f);a.setRenderTarget(this.renderTarget);a.clear();k=g.__webglObjects;i=0;for(j=k.length;i<j;i++){l=k[i];n=l.object;l.render=false;if(n.visible&&(!(n instanceof THREE.Mesh)||!n.frustumCulled||e.contains(n))){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);l.render=true}}i=0;for(j=k.length;i<j;i++){l=k[i];if(l.render){n=l.object;l=l.buffer;n.material&&a.setMaterialFaces(n.material);m=n.customDepthMaterial?n.customDepthMaterial:n.geometry.morphTargets.length?
+d:c;l instanceof THREE.BufferGeometry?a.renderBufferDirect(h,g.__lights,null,m,l,n):a.renderBuffer(h,g.__lights,null,m,l,n)}}k=g.__webglObjectsImmediate;i=0;for(j=k.length;i<j;i++){l=k[i];n=l.object;if(n.visible&&n.castShadow){n._modelViewMatrix.multiply(h.matrixWorldInverse,n.matrixWorld);a.renderImmediateObject(h,g.__lights,null,c,n)}}i=a.getClearColor();j=a.getClearAlpha();b.clearColor(i.r,i.g,i.b,j);b.enable(b.BLEND)}};
 THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\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 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = (       visibility.r / 9.0 ) *\n( 1.0 - visibility.g / 9.0 ) *\n(       visibility.b / 9.0 ) *\n( 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:"precision mediump float;\nuniform sampler2D map;\nuniform float opacity;\nuniform int renderType;\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}"},
 lensFlare:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\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 sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform int renderType;\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 +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a +\ntexture2D( 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}"}};
 THREE.ShaderSprite={sprite:{vertexShader:"uniform int useScreenCoordinates;\nuniform int affectedByDistance;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position + alignment;\nvec2 rotatedPosition;\nrotatedPosition.x = ( cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y ) * scale.x;\nrotatedPosition.y = ( sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y ) * scale.y;\nvec4 finalPosition;\nif( useScreenCoordinates != 0 ) {\nfinalPosition = vec4( screenPosition.xy + rotatedPosition, screenPosition.z, 1.0 );\n} else {\nfinalPosition = projectionMatrix * modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition * ( affectedByDistance == 1 ? 1.0 : finalPosition.z );\n}\ngl_Position = finalPosition;\n}",

+ 74 - 75
build/custom/ThreeWebGL.js

@@ -77,15 +77,15 @@ THREE.Projector=function(){function a(a,c){h=0;E.objects.length=0;E.sprites.leng
 THREE.Light&&E.lights.push(a);for(var c=0,d=a.children.length;c<d;c++)e(a.children[c])}};e(a);c===true&&E.objects.sort(d);return E}function b(){var a;if(h===j.length){a=new THREE.RenderableObject;j.push(a)}else a=j[h];h++;return a}function c(){var a;if(k===i.length){a=new THREE.RenderableVertex;i.push(a)}else a=i[k];k++;return a}function d(a,b){return b.z-a.z}function e(a,b){var c=0,d=1,f=a.z+a.w,h=b.z+b.w,e=-a.z+a.w,j=-b.z+b.w;if(f>=0&&h>=0&&e>=0&&j>=0)return true;if(f<0&&h<0||e<0&&j<0)return false;
 f<0?c=Math.max(c,f/(f-h)):h<0&&(d=Math.min(d,f/(f-h)));e<0?c=Math.max(c,e/(e-j)):j<0&&(d=Math.min(d,e/(e-j)));if(d<c)return false;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return true}var f,h,j=[],l,k,i=[],m,n,o=[],u,q=[],r,p,x=[],w,H,v=[],E={objects:[],sprites:[],lights:[],elements:[]},A=new THREE.Vector3,G=new THREE.Vector4,C=new THREE.Matrix4,P=new THREE.Matrix4,I=new THREE.Frustum,U=new THREE.Vector4,W=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);C.multiply(b.projectionMatrix,
 b.matrixWorldInverse);C.multiplyVector3(a);return a};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);C.multiply(b.matrixWorld,b.projectionMatrixInverse);C.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(b,f,h){var j=f.near,A=f.far,ea=false,ja,Q,la,aa,T,da,ta,ia,N,ua,Ba,ma,
-Ja,Ia,Ca;H=p=u=n=0;E.elements.length=0;if(f.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");b.add(f)}b.updateMatrixWorld();f.matrixWorldInverse.getInverse(f.matrixWorld);C.multiply(f.projectionMatrix,f.matrixWorldInverse);I.setFromMatrix(C);E=a(b,false);b=0;for(ja=E.objects.length;b<ja;b++){N=E.objects[b].object;ua=N.matrixWorld;k=0;if(N instanceof THREE.Mesh){Ba=N.geometry;ma=N.geometry.materials;aa=Ba.vertices;Ja=Ba.faces;Ia=Ba.faceVertexUvs;Ba=N.matrixRotationWorld.extractRotation(ua);
-Q=0;for(la=aa.length;Q<la;Q++){l=c();l.positionWorld.copy(aa[Q]);ua.multiplyVector3(l.positionWorld);l.positionScreen.copy(l.positionWorld);C.multiplyVector4(l.positionScreen);l.positionScreen.x=l.positionScreen.x/l.positionScreen.w;l.positionScreen.y=l.positionScreen.y/l.positionScreen.w;l.visible=l.positionScreen.z>j&&l.positionScreen.z<A}aa=0;for(Q=Ja.length;aa<Q;aa++){la=Ja[aa];if(la instanceof THREE.Face3){T=i[la.a];da=i[la.b];ta=i[la.c];if(T.visible===true&&da.visible===true&&ta.visible===true){ea=
-(ta.positionScreen.x-T.positionScreen.x)*(da.positionScreen.y-T.positionScreen.y)-(ta.positionScreen.y-T.positionScreen.y)*(da.positionScreen.x-T.positionScreen.x)<0;if(N.doubleSided===true||ea!==N.flipSided){ia=void 0;if(n===o.length){ia=new THREE.RenderableFace3;o.push(ia)}else ia=o[n];n++;m=ia;m.v1.copy(T);m.v2.copy(da);m.v3.copy(ta)}else continue}else continue}else if(la instanceof THREE.Face4){T=i[la.a];da=i[la.b];ta=i[la.c];ia=i[la.d];if(T.visible===true&&da.visible===true&&ta.visible===true&&
-ia.visible===true){ea=(ia.positionScreen.x-T.positionScreen.x)*(da.positionScreen.y-T.positionScreen.y)-(ia.positionScreen.y-T.positionScreen.y)*(da.positionScreen.x-T.positionScreen.x)<0||(da.positionScreen.x-ta.positionScreen.x)*(ia.positionScreen.y-ta.positionScreen.y)-(da.positionScreen.y-ta.positionScreen.y)*(ia.positionScreen.x-ta.positionScreen.x)<0;if(N.doubleSided===true||ea!==N.flipSided){Ca=void 0;if(u===q.length){Ca=new THREE.RenderableFace4;q.push(Ca)}else Ca=q[u];u++;m=Ca;m.v1.copy(T);
-m.v2.copy(da);m.v3.copy(ta);m.v4.copy(ia)}else continue}else continue}m.normalWorld.copy(la.normal);ea===false&&(N.flipSided===true||N.doubleSided===true)&&m.normalWorld.negate();Ba.multiplyVector3(m.normalWorld);m.centroidWorld.copy(la.centroid);ua.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);C.multiplyVector3(m.centroidScreen);ta=la.vertexNormals;T=0;for(da=ta.length;T<da;T++){ia=m.vertexNormalsWorld[T];ia.copy(ta[T]);ea===false&&(N.flipSided===true||N.doubleSided===true)&&
-ia.negate();Ba.multiplyVector3(ia)}T=0;for(da=Ia.length;T<da;T++){Ca=Ia[T][aa];if(Ca!==void 0){ta=0;for(ia=Ca.length;ta<ia;ta++)m.uvs[T][ta]=Ca[ta]}}m.material=N.material;m.faceMaterial=la.materialIndex!==null?ma[la.materialIndex]:null;m.z=m.centroidScreen.z;E.elements.push(m)}}else if(N instanceof THREE.Line){P.multiply(C,ua);aa=N.geometry.vertices;T=c();T.positionScreen.copy(aa[0]);P.multiplyVector4(T.positionScreen);ua=N.type===THREE.LinePieces?2:1;Q=1;for(la=aa.length;Q<la;Q++){T=c();T.positionScreen.copy(aa[Q]);
-P.multiplyVector4(T.positionScreen);if(!((Q+1)%ua>0)){da=i[k-2];U.copy(T.positionScreen);W.copy(da.positionScreen);if(e(U,W)===true){U.multiplyScalar(1/U.w);W.multiplyScalar(1/W.w);ma=void 0;if(p===x.length){ma=new THREE.RenderableLine;x.push(ma)}else ma=x[p];p++;r=ma;r.v1.positionScreen.copy(U);r.v2.positionScreen.copy(W);r.z=Math.max(U.z,W.z);r.material=N.material;E.elements.push(r)}}}}}b=0;for(ja=E.sprites.length;b<ja;b++){N=E.sprites[b].object;ua=N.matrixWorld;if(N instanceof THREE.Particle){G.set(ua.elements[12],
-ua.elements[13],ua.elements[14],1);C.multiplyVector4(G);G.z=G.z/G.w;if(G.z>0&&G.z<1){j=void 0;if(H===v.length){j=new THREE.RenderableParticle;v.push(j)}else j=v[H];H++;w=j;w.object=N;w.x=G.x/G.w;w.y=G.y/G.w;w.z=G.z;w.rotation=N.rotation.z;w.scale.x=N.scale.x*Math.abs(w.x-(G.x+f.projectionMatrix.elements[0])/(G.w+f.projectionMatrix.elements[12]));w.scale.y=N.scale.y*Math.abs(w.y-(G.y+f.projectionMatrix.elements[5])/(G.w+f.projectionMatrix.elements[13]));w.material=N.material;E.elements.push(w)}}}h&&
-E.elements.sort(d);return E}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1};
+Ja,Ia,Ca;H=p=u=n=0;E.elements.length=0;b.updateMatrixWorld();f.parent===void 0&&f.updateMatrixWorld();f.matrixWorldInverse.getInverse(f.matrixWorld);C.multiply(f.projectionMatrix,f.matrixWorldInverse);I.setFromMatrix(C);E=a(b,false);b=0;for(ja=E.objects.length;b<ja;b++){N=E.objects[b].object;ua=N.matrixWorld;k=0;if(N instanceof THREE.Mesh){Ba=N.geometry;ma=N.geometry.materials;aa=Ba.vertices;Ja=Ba.faces;Ia=Ba.faceVertexUvs;Ba=N.matrixRotationWorld.extractRotation(ua);Q=0;for(la=aa.length;Q<la;Q++){l=
+c();l.positionWorld.copy(aa[Q]);ua.multiplyVector3(l.positionWorld);l.positionScreen.copy(l.positionWorld);C.multiplyVector4(l.positionScreen);l.positionScreen.x=l.positionScreen.x/l.positionScreen.w;l.positionScreen.y=l.positionScreen.y/l.positionScreen.w;l.visible=l.positionScreen.z>j&&l.positionScreen.z<A}aa=0;for(Q=Ja.length;aa<Q;aa++){la=Ja[aa];if(la instanceof THREE.Face3){T=i[la.a];da=i[la.b];ta=i[la.c];if(T.visible===true&&da.visible===true&&ta.visible===true){ea=(ta.positionScreen.x-T.positionScreen.x)*
+(da.positionScreen.y-T.positionScreen.y)-(ta.positionScreen.y-T.positionScreen.y)*(da.positionScreen.x-T.positionScreen.x)<0;if(N.doubleSided===true||ea!==N.flipSided){ia=void 0;if(n===o.length){ia=new THREE.RenderableFace3;o.push(ia)}else ia=o[n];n++;m=ia;m.v1.copy(T);m.v2.copy(da);m.v3.copy(ta)}else continue}else continue}else if(la instanceof THREE.Face4){T=i[la.a];da=i[la.b];ta=i[la.c];ia=i[la.d];if(T.visible===true&&da.visible===true&&ta.visible===true&&ia.visible===true){ea=(ia.positionScreen.x-
+T.positionScreen.x)*(da.positionScreen.y-T.positionScreen.y)-(ia.positionScreen.y-T.positionScreen.y)*(da.positionScreen.x-T.positionScreen.x)<0||(da.positionScreen.x-ta.positionScreen.x)*(ia.positionScreen.y-ta.positionScreen.y)-(da.positionScreen.y-ta.positionScreen.y)*(ia.positionScreen.x-ta.positionScreen.x)<0;if(N.doubleSided===true||ea!==N.flipSided){Ca=void 0;if(u===q.length){Ca=new THREE.RenderableFace4;q.push(Ca)}else Ca=q[u];u++;m=Ca;m.v1.copy(T);m.v2.copy(da);m.v3.copy(ta);m.v4.copy(ia)}else continue}else continue}m.normalWorld.copy(la.normal);
+ea===false&&(N.flipSided===true||N.doubleSided===true)&&m.normalWorld.negate();Ba.multiplyVector3(m.normalWorld);m.centroidWorld.copy(la.centroid);ua.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);C.multiplyVector3(m.centroidScreen);ta=la.vertexNormals;T=0;for(da=ta.length;T<da;T++){ia=m.vertexNormalsWorld[T];ia.copy(ta[T]);ea===false&&(N.flipSided===true||N.doubleSided===true)&&ia.negate();Ba.multiplyVector3(ia)}T=0;for(da=Ia.length;T<da;T++){Ca=Ia[T][aa];if(Ca!==void 0){ta=
+0;for(ia=Ca.length;ta<ia;ta++)m.uvs[T][ta]=Ca[ta]}}m.material=N.material;m.faceMaterial=la.materialIndex!==null?ma[la.materialIndex]:null;m.z=m.centroidScreen.z;E.elements.push(m)}}else if(N instanceof THREE.Line){P.multiply(C,ua);aa=N.geometry.vertices;T=c();T.positionScreen.copy(aa[0]);P.multiplyVector4(T.positionScreen);ua=N.type===THREE.LinePieces?2:1;Q=1;for(la=aa.length;Q<la;Q++){T=c();T.positionScreen.copy(aa[Q]);P.multiplyVector4(T.positionScreen);if(!((Q+1)%ua>0)){da=i[k-2];U.copy(T.positionScreen);
+W.copy(da.positionScreen);if(e(U,W)===true){U.multiplyScalar(1/U.w);W.multiplyScalar(1/W.w);ma=void 0;if(p===x.length){ma=new THREE.RenderableLine;x.push(ma)}else ma=x[p];p++;r=ma;r.v1.positionScreen.copy(U);r.v2.positionScreen.copy(W);r.z=Math.max(U.z,W.z);r.material=N.material;E.elements.push(r)}}}}}b=0;for(ja=E.sprites.length;b<ja;b++){N=E.sprites[b].object;ua=N.matrixWorld;if(N instanceof THREE.Particle){G.set(ua.elements[12],ua.elements[13],ua.elements[14],1);C.multiplyVector4(G);G.z=G.z/G.w;
+if(G.z>0&&G.z<1){j=void 0;if(H===v.length){j=new THREE.RenderableParticle;v.push(j)}else j=v[H];H++;w=j;w.object=N;w.x=G.x/G.w;w.y=G.y/G.w;w.z=G.z;w.rotation=N.rotation.z;w.scale.x=N.scale.x*Math.abs(w.x-(G.x+f.projectionMatrix.elements[0])/(G.w+f.projectionMatrix.elements[12]));w.scale.y=N.scale.y*Math.abs(w.y-(G.y+f.projectionMatrix.elements[5])/(G.w+f.projectionMatrix.elements[13]));w.material=N.material;E.elements.push(w)}}}h&&E.elements.sort(d);return E}};
+THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=d!==void 0?d:1};
 THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),e=Math.cos(a.z/2),f=Math.sin(a.x/2),h=Math.sin(a.y/2),j=Math.sin(a.z/2);if(b===void 0||b==="XYZ"){this.x=f*d*e+c*h*j;this.y=c*h*e-f*d*j;this.z=c*d*j+f*h*e;this.w=c*d*e-f*h*j}else if(b==="YXZ"){this.x=f*d*e+c*h*j;this.y=c*h*e-f*d*j;this.z=
 c*d*j-f*h*e;this.w=c*d*e+f*h*j}else if(b==="ZXY"){this.x=f*d*e-c*h*j;this.y=c*h*e+f*d*j;this.z=c*d*j+f*h*e;this.w=c*d*e-f*h*j}else if(b==="ZYX"){this.x=f*d*e-c*h*j;this.y=c*h*e+f*d*j;this.z=c*d*j-f*h*e;this.w=c*d*e+f*h*j}else if(b==="YZX"){this.x=f*d*e+c*h*j;this.y=c*h*e+f*d*j;this.z=c*d*j-f*h*e;this.w=c*d*e-f*h*j}else if(b==="XZY"){this.x=f*d*e-c*h*j;this.y=c*h*e-f*d*j;this.z=c*d*j+f*h*e;this.w=c*d*e+f*h*j}return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y*
 d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0],a=b[4],d=b[8],e=b[1],f=b[5],h=b[9],j=b[2],l=b[6],b=b[10],k=c+f+b;if(k>0){c=0.5/Math.sqrt(k+1);this.w=0.25/c;this.x=(l-h)*c;this.y=(d-j)*c;this.z=(e-a)*c}else if(c>f&&c>b){c=2*Math.sqrt(1+c-f-b);this.w=(l-h)/c;this.x=0.25*c;this.y=(a+e)/c;this.z=(d+j)/c}else if(f>b){c=2*Math.sqrt(1+f-c-b);this.w=(d-j)/c;this.x=(a+e)/c;this.y=0.25*c;this.z=(h+l)/c}else{c=2*Math.sqrt(1+b-c-f);this.w=(e-a)/c;this.x=
@@ -330,72 +330,71 @@ e.__webglColorBuffer);g.vertexAttribPointer(b.color,3,g.FLOAT,false,0,0)}if(b.no
 if(b.uv2>=0)if(e.__webglUV2Buffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUV2Buffer);g.vertexAttribPointer(b.uv2,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv2)}else g.disableVertexAttribArray(b.uv2);if(d.skinning&&b.skinVertexA>=0&&b.skinVertexB>=0&&b.skinIndex>=0&&b.skinWeight>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinVertexABuffer);g.vertexAttribPointer(b.skinVertexA,4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinVertexBBuffer);g.vertexAttribPointer(b.skinVertexB,4,g.FLOAT,
 false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinIndicesBuffer);g.vertexAttribPointer(b.skinIndex,4,g.FLOAT,false,0,0);g.bindBuffer(g.ARRAY_BUFFER,e.__webglSkinWeightsBuffer);g.vertexAttribPointer(b.skinWeight,4,g.FLOAT,false,0,0)}}if(f instanceof THREE.Mesh){if(d.wireframe){d=d.wireframeLinewidth;if(d!==Mb){g.lineWidth(d);Mb=d}a&&g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer);g.drawElements(g.LINES,e.__webglLineCount,g.UNSIGNED_SHORT,0)}else{a&&g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer);
 g.drawElements(g.TRIANGLES,e.__webglFaceCount,g.UNSIGNED_SHORT,0)}F.info.render.calls++;F.info.render.vertices=F.info.render.vertices+e.__webglFaceCount;F.info.render.faces=F.info.render.faces+e.__webglFaceCount/3}else if(f instanceof THREE.Line){f=f.type===THREE.LineStrip?g.LINE_STRIP:g.LINES;d=d.linewidth;if(d!==Mb){g.lineWidth(d);Mb=d}g.drawArrays(f,0,e.__webglLineCount);F.info.render.calls++}else if(f instanceof THREE.ParticleSystem){g.drawArrays(g.POINTS,0,e.__webglParticleCount);F.info.render.calls++;
-F.info.render.points=F.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){g.drawArrays(g.TRIANGLE_STRIP,0,e.__webglVertexCount);F.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,j,m,n=a.__lights,o=a.fog;aa=-1;Wa=true;if(b.parent===void 0){console.warn("DEPRECATED: Camera hasn't been added to a Scene. Adding it...");a.add(b)}this.autoUpdateScene&&a.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=
-new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Wb.multiply(b.projectionMatrix,b.matrixWorldInverse);ic.setFromMatrix(Wb);this.autoUpdateObjects&&this.initWebGLObjects(a);l(this.renderPluginsPre,a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;F.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,
-this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;for(e=m.length;d<e;d++){f=m[d];j=f.object;f.render=false;if(j.visible&&(!(j instanceof THREE.Mesh||j instanceof THREE.ParticleSystem)||!j.frustumCulled||ic.contains(j))){p(j,b);var q=f,r=q.object,u=q.buffer,v=void 0,v=v=void 0,v=r.material;if(v instanceof THREE.MeshFaceMaterial){v=u.materialIndex;if(v>=0){v=r.geometry.materials[v];if(v.transparent){q.transparent=v;q.opaque=null}else{q.opaque=v;q.transparent=null}}}else if(v)if(v.transparent){q.transparent=
-v;q.opaque=null}else{q.opaque=v;q.transparent=null}f.render=true;if(this.sortObjects)if(j.renderDepth)f.z=j.renderDepth;else{pb.copy(j.matrixWorld.getPosition());Wb.multiplyVector3(pb);f.z=pb.z}}}this.sortObjects&&m.sort(h);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];j=f.object;if(j.visible){p(j,b);j=f.object.material;if(j.transparent){f.transparent=j;f.opaque=null}else{f.opaque=j;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,
-d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);this.setDepthWrite(d.depthWrite);x(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);k(a.__webglObjects,false,"",b,n,o,true,d);i(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);k(a.__webglObjects,true,"opaque",b,n,o,false);i(a.__webglObjectsImmediate,"opaque",b,n,o,false);k(a.__webglObjects,false,"transparent",b,n,o,true);i(a.__webglObjectsImmediate,"transparent",b,n,o,true)}l(this.renderPluginsPost,
-a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){g.bindTexture(g.TEXTURE_CUBE_MAP,c.__webglTexture);g.generateMipmap(g.TEXTURE_CUBE_MAP);g.bindTexture(g.TEXTURE_CUBE_MAP,null)}else{g.bindTexture(g.TEXTURE_2D,c.__webglTexture);g.generateMipmap(g.TEXTURE_2D);g.bindTexture(g.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=r(a,b,c,d,e);T=
--1;F.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,g,ic):e.render(function(a){F.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var h=a.__objectsAdded[0],i=a,j=void 0,k=void 0,l=void 0;if(!h.__webglInit){h.__webglInit=true;h._modelViewMatrix=new THREE.Matrix4;h._normalMatrix=new THREE.Matrix3;if(h instanceof THREE.Mesh){k=
-h.geometry;if(k instanceof THREE.Geometry){if(k.geometryGroups===void 0){var p=k,r=void 0,v=void 0,w=void 0,x=void 0,z=void 0,A=void 0,C=void 0,E={},H=p.morphTargets.length,P=p.morphNormals.length;p.geometryGroups={};r=0;for(v=p.faces.length;r<v;r++){w=p.faces[r];x=w.materialIndex;A=x!==void 0?x:-1;E[A]===void 0&&(E[A]={hash:A,counter:0});C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:P});
-z=w instanceof THREE.Face3?3:4;if(p.geometryGroups[C].vertices+z>65535){E[A].counter=E[A].counter+1;C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:P})}w instanceof THREE.Face3?p.geometryGroups[C].faces3.push(r):p.geometryGroups[C].faces4.push(r);p.geometryGroups[C].vertices=p.geometryGroups[C].vertices+z}p.geometryGroupsList=[];var O=void 0;for(O in p.geometryGroups){p.geometryGroups[O].id=
-ta++;p.geometryGroupsList.push(p.geometryGroups[O])}}for(j in k.geometryGroups){l=k.geometryGroups[j];if(!l.__webglVertexBuffer){var G=l;G.__webglVertexBuffer=g.createBuffer();G.__webglNormalBuffer=g.createBuffer();G.__webglTangentBuffer=g.createBuffer();G.__webglColorBuffer=g.createBuffer();G.__webglUVBuffer=g.createBuffer();G.__webglUV2Buffer=g.createBuffer();G.__webglSkinVertexABuffer=g.createBuffer();G.__webglSkinVertexBBuffer=g.createBuffer();G.__webglSkinIndicesBuffer=g.createBuffer();G.__webglSkinWeightsBuffer=
-g.createBuffer();G.__webglFaceBuffer=g.createBuffer();G.__webglLineBuffer=g.createBuffer();var N=void 0,Q=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];N=0;for(Q=G.numMorphTargets;N<Q;N++)G.__webglMorphTargetsBuffers.push(g.createBuffer())}if(G.numMorphNormals){G.__webglMorphNormalsBuffers=[];N=0;for(Q=G.numMorphNormals;N<Q;N++)G.__webglMorphNormalsBuffers.push(g.createBuffer())}F.info.memory.geometries++;var I=l,S=h,T=S.geometry,U=I.faces3,W=I.faces4,V=U.length*3+W.length*4,da=U.length*
-1+W.length*2,ea=U.length*3+W.length*4,aa=c(S,I),ia=e(aa),la=d(aa),ua=aa.vertexColors?aa.vertexColors:false;I.__vertexArray=new Float32Array(V*3);if(la)I.__normalArray=new Float32Array(V*3);if(T.hasTangents)I.__tangentArray=new Float32Array(V*4);if(ua)I.__colorArray=new Float32Array(V*3);if(ia){if(T.faceUvs.length>0||T.faceVertexUvs.length>0)I.__uvArray=new Float32Array(V*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>1)I.__uv2Array=new Float32Array(V*2)}if(S.geometry.skinWeights.length&&S.geometry.skinIndices.length){I.__skinVertexAArray=
-new Float32Array(V*4);I.__skinVertexBArray=new Float32Array(V*4);I.__skinIndexArray=new Float32Array(V*4);I.__skinWeightArray=new Float32Array(V*4)}I.__faceArray=new Uint16Array(da*3);I.__lineArray=new Uint16Array(ea*2);var ja=void 0,Lb=void 0;if(I.numMorphTargets){I.__morphTargetsArrays=[];ja=0;for(Lb=I.numMorphTargets;ja<Lb;ja++)I.__morphTargetsArrays.push(new Float32Array(V*3))}if(I.numMorphNormals){I.__morphNormalsArrays=[];ja=0;for(Lb=I.numMorphNormals;ja<Lb;ja++)I.__morphNormalsArrays.push(new Float32Array(V*
-3))}I.__webglFaceCount=da*3;I.__webglLineCount=ea*2;if(aa.attributes){if(I.__webglCustomAttributesList===void 0)I.__webglCustomAttributesList=[];var Ca=void 0;for(Ca in aa.attributes){var Ba=aa.attributes[Ca],ma={},Ja;for(Ja in Ba)ma[Ja]=Ba[Ja];if(!ma.__webglInitialized||ma.createUniqueBuffers){ma.__webglInitialized=true;var Ia=1;ma.type==="v2"?Ia=2:ma.type==="v3"?Ia=3:ma.type==="v4"?Ia=4:ma.type==="c"&&(Ia=3);ma.size=Ia;ma.array=new Float32Array(V*Ia);ma.buffer=g.createBuffer();ma.buffer.belongsToAttribute=
-Ca;Ba.needsUpdate=true;ma.__original=Ba}I.__webglCustomAttributesList.push(ma)}}I.__inittedArrays=true;k.verticesNeedUpdate=true;k.morphTargetsNeedUpdate=true;k.elementsNeedUpdate=true;k.uvsNeedUpdate=true;k.normalsNeedUpdate=true;k.tangentsNeedUpdate=true;k.colorsNeedUpdate=true}}}else if(k instanceof THREE.BufferGeometry){var Mb=k,Ma=void 0,xb=void 0,Va=void 0;for(Ma in Mb.attributes){Va=Ma==="index"?g.ELEMENT_ARRAY_BUFFER:g.ARRAY_BUFFER;xb=Mb.attributes[Ma];xb.buffer=g.createBuffer();g.bindBuffer(Va,
-xb.buffer);g.bufferData(Va,xb.array,g.STATIC_DRAW)}}}else if(h instanceof THREE.Ribbon){k=h.geometry;if(!k.__webglVertexBuffer){var pb=k;pb.__webglVertexBuffer=g.createBuffer();pb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var Wa=k,Za=Wa.vertices.length;Wa.__vertexArray=new Float32Array(Za*3);Wa.__colorArray=new Float32Array(Za*3);Wa.__webglVertexCount=Za;k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.Line){k=h.geometry;if(!k.__webglVertexBuffer){var wb=
-k;wb.__webglVertexBuffer=g.createBuffer();wb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var kc=k,Wb=h,Nb=kc.vertices.length;kc.__vertexArray=new Float32Array(Nb*3);kc.__colorArray=new Float32Array(Nb*3);kc.__webglLineCount=Nb;b(kc,Wb);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.ParticleSystem){k=h.geometry;if(!k.__webglVertexBuffer){var Vb=k;Vb.__webglVertexBuffer=g.createBuffer();Vb.__webglColorBuffer=g.createBuffer();F.info.geometries++;var Xb=
-k,hc=h,Ob=Xb.vertices.length;Xb.__vertexArray=new Float32Array(Ob*3);Xb.__colorArray=new Float32Array(Ob*3);Xb.__sortArray=[];Xb.__webglParticleCount=Ob;b(Xb,hc);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}}if(!h.__webglActive){if(h instanceof THREE.Mesh){k=h.geometry;if(k instanceof THREE.BufferGeometry)m(i.__webglObjects,k,h);else for(j in k.geometryGroups){l=k.geometryGroups[j];m(i.__webglObjects,l,h)}}else if(h instanceof THREE.Ribbon||h instanceof THREE.Line||h instanceof THREE.ParticleSystem){k=
-h.geometry;m(i.__webglObjects,k,h)}else h instanceof THREE.ImmediateRenderObject||h.immediateRenderCallback?i.__webglObjectsImmediate.push({object:h,opaque:null,transparent:null}):h instanceof THREE.Sprite?i.__webglSprites.push(h):h instanceof THREE.LensFlare&&i.__webglFlares.push(h);h.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var Ra=a.__objectsRemoved[0],Ac=a;Ra instanceof THREE.Mesh||Ra instanceof THREE.ParticleSystem||Ra instanceof THREE.Ribbon||Ra instanceof
-THREE.Line?u(Ac.__webglObjects,Ra):Ra instanceof THREE.Sprite?q(Ac.__webglSprites,Ra):Ra instanceof THREE.LensFlare?q(Ac.__webglFlares,Ra):(Ra instanceof THREE.ImmediateRenderObject||Ra.immediateRenderCallback)&&u(Ac.__webglObjectsImmediate,Ra);Ra.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var Pb=0,ic=a.__webglObjects.length;Pb<ic;Pb++){var Xa=a.__webglObjects[Pb].object,X=Xa.geometry,lc=void 0,Yb=void 0,Na=void 0;if(Xa instanceof THREE.Mesh)if(X instanceof THREE.BufferGeometry){if(X.verticesNeedUpdate||
-X.elementsNeedUpdate||X.uvsNeedUpdate||X.normalsNeedUpdate||X.colorsNeedUpdate||X.tangentsNeedUpdate){var qb=X,Zb=g.DYNAMIC_DRAW,jc=!X.dynamic,$b=qb.attributes,Rc=$b.index,Sc=$b.position,Tc=$b.normal,Uc=$b.uv,Vc=$b.color,Wc=$b.tangent;if(qb.elementsNeedUpdate&&Rc!==void 0){g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Rc.buffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Rc.array,Zb)}if(qb.verticesNeedUpdate&&Sc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Sc.buffer);g.bufferData(g.ARRAY_BUFFER,Sc.array,Zb)}if(qb.normalsNeedUpdate&&
-Tc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Tc.buffer);g.bufferData(g.ARRAY_BUFFER,Tc.array,Zb)}if(qb.uvsNeedUpdate&&Uc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Uc.buffer);g.bufferData(g.ARRAY_BUFFER,Uc.array,Zb)}if(qb.colorsNeedUpdate&&Vc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Vc.buffer);g.bufferData(g.ARRAY_BUFFER,Vc.array,Zb)}if(qb.tangentsNeedUpdate&&Wc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Wc.buffer);g.bufferData(g.ARRAY_BUFFER,Wc.array,Zb)}if(jc){var gc=void 0;for(gc in qb.attributes)delete qb.attributes[gc].array}}X.verticesNeedUpdate=
-false;X.elementsNeedUpdate=false;X.uvsNeedUpdate=false;X.normalsNeedUpdate=false;X.colorsNeedUpdate=false;X.tangentsNeedUpdate=false}else{for(var Xc=0,xc=X.geometryGroupsList.length;Xc<xc;Xc++){lc=X.geometryGroupsList[Xc];Na=c(Xa,lc);Yb=Na.attributes&&n(Na);if(X.verticesNeedUpdate||X.morphTargetsNeedUpdate||X.elementsNeedUpdate||X.uvsNeedUpdate||X.normalsNeedUpdate||X.colorsNeedUpdate||X.tangentsNeedUpdate||Yb){var Z=lc,yc=Xa,Pa=g.DYNAMIC_DRAW,zc=!X.dynamic,Qb=Na;if(Z.__inittedArrays){var fd=d(Qb),
-Yc=Qb.vertexColors?Qb.vertexColors:false,gd=e(Qb),Bc=fd===THREE.SmoothShading,y=void 0,M=void 0,Ua=void 0,D=void 0,ac=void 0,yb=void 0,Ya=void 0,Cc=void 0,rb=void 0,bc=void 0,cc=void 0,J=void 0,K=void 0,L=void 0,$=void 0,$a=void 0,ab=void 0,bb=void 0,mc=void 0,cb=void 0,db=void 0,eb=void 0,nc=void 0,fb=void 0,gb=void 0,hb=void 0,oc=void 0,ib=void 0,jb=void 0,kb=void 0,pc=void 0,lb=void 0,mb=void 0,nb=void 0,qc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Dc=void 0,Cb=void 0,Db=void 0,Eb=void 0,Ec=void 0,
-fa=void 0,hd=void 0,Fb=void 0,dc=void 0,ec=void 0,Da=void 0,id=void 0,za=void 0,Aa=void 0,Gb=void 0,sb=void 0,va=0,ya=0,tb=0,ub=0,Sa=0,Ha=0,ha=0,Ka=0,wa=0,B=0,Y=0,t=0,ga=void 0,Ea=Z.__vertexArray,rc=Z.__uvArray,sc=Z.__uv2Array,Ta=Z.__normalArray,na=Z.__tangentArray,Fa=Z.__colorArray,oa=Z.__skinVertexAArray,pa=Z.__skinVertexBArray,qa=Z.__skinIndexArray,ra=Z.__skinWeightArray,Zc=Z.__morphTargetsArrays,$c=Z.__morphNormalsArrays,ad=Z.__webglCustomAttributesList,s=void 0,ob=Z.__faceArray,Qa=Z.__lineArray,
-La=yc.geometry,Pc=La.elementsNeedUpdate,jd=La.uvsNeedUpdate,Qc=La.normalsNeedUpdate,qd=La.tangentsNeedUpdate,rd=La.colorsNeedUpdate,sd=La.morphTargetsNeedUpdate,Rb=La.vertices,ba=Z.faces3,ca=Z.faces4,xa=La.faces,bd=La.faceVertexUvs[0],cd=La.faceVertexUvs[1],Sb=La.skinVerticesA,Tb=La.skinVerticesB,Ub=La.skinIndices,Hb=La.skinWeights,Ib=La.morphTargets,Fc=La.morphNormals;if(La.verticesNeedUpdate){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=Rb[D.a];K=Rb[D.b];L=Rb[D.c];Ea[ya]=J.x;Ea[ya+1]=J.y;Ea[ya+2]=
-J.z;Ea[ya+3]=K.x;Ea[ya+4]=K.y;Ea[ya+5]=K.z;Ea[ya+6]=L.x;Ea[ya+7]=L.y;Ea[ya+8]=L.z;ya=ya+9}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=Rb[D.a];K=Rb[D.b];L=Rb[D.c];$=Rb[D.d];Ea[ya]=J.x;Ea[ya+1]=J.y;Ea[ya+2]=J.z;Ea[ya+3]=K.x;Ea[ya+4]=K.y;Ea[ya+5]=K.z;Ea[ya+6]=L.x;Ea[ya+7]=L.y;Ea[ya+8]=L.z;Ea[ya+9]=$.x;Ea[ya+10]=$.y;Ea[ya+11]=$.z;ya=ya+12}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Ea,Pa)}if(sd){Da=0;for(id=Ib.length;Da<id;Da++){y=Y=0;for(M=ba.length;y<M;y++){Gb=ba[y];
-D=xa[Gb];J=Ib[Da].vertices[D.a];K=Ib[Da].vertices[D.b];L=Ib[Da].vertices[D.c];za=Zc[Da];za[Y]=J.x;za[Y+1]=J.y;za[Y+2]=J.z;za[Y+3]=K.x;za[Y+4]=K.y;za[Y+5]=K.z;za[Y+6]=L.x;za[Y+7]=L.y;za[Y+8]=L.z;if(Qb.morphNormals){if(Bc){sb=Fc[Da].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c}else eb=db=cb=Fc[Da].faceNormals[Gb];Aa=$c[Da];Aa[Y]=cb.x;Aa[Y+1]=cb.y;Aa[Y+2]=cb.z;Aa[Y+3]=db.x;Aa[Y+4]=db.y;Aa[Y+5]=db.z;Aa[Y+6]=eb.x;Aa[Y+7]=eb.y;Aa[Y+8]=eb.z}Y=Y+9}y=0;for(M=ca.length;y<M;y++){Gb=ca[y];D=xa[Gb];J=Ib[Da].vertices[D.a];
-K=Ib[Da].vertices[D.b];L=Ib[Da].vertices[D.c];$=Ib[Da].vertices[D.d];za=Zc[Da];za[Y]=J.x;za[Y+1]=J.y;za[Y+2]=J.z;za[Y+3]=K.x;za[Y+4]=K.y;za[Y+5]=K.z;za[Y+6]=L.x;za[Y+7]=L.y;za[Y+8]=L.z;za[Y+9]=$.x;za[Y+10]=$.y;za[Y+11]=$.z;if(Qb.morphNormals){if(Bc){sb=Fc[Da].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c;nc=sb.d}else nc=eb=db=cb=Fc[Da].faceNormals[Gb];Aa=$c[Da];Aa[Y]=cb.x;Aa[Y+1]=cb.y;Aa[Y+2]=cb.z;Aa[Y+3]=db.x;Aa[Y+4]=db.y;Aa[Y+5]=db.z;Aa[Y+6]=eb.x;Aa[Y+7]=eb.y;Aa[Y+8]=eb.z;Aa[Y+9]=nc.x;Aa[Y+10]=nc.y;
-Aa[Y+11]=nc.z}Y=Y+12}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglMorphTargetsBuffers[Da]);g.bufferData(g.ARRAY_BUFFER,Zc[Da],Pa);if(Qb.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglMorphNormalsBuffers[Da]);g.bufferData(g.ARRAY_BUFFER,$c[Da],Pa)}}}if(Hb.length){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];ra[B]=ib.x;ra[B+1]=ib.y;ra[B+2]=ib.z;ra[B+3]=ib.w;ra[B+4]=jb.x;ra[B+5]=jb.y;ra[B+6]=jb.z;ra[B+7]=jb.w;ra[B+8]=kb.x;ra[B+9]=kb.y;ra[B+10]=kb.z;ra[B+11]=kb.w;lb=Ub[D.a];mb=
-Ub[D.b];nb=Ub[D.c];qa[B]=lb.x;qa[B+1]=lb.y;qa[B+2]=lb.z;qa[B+3]=lb.w;qa[B+4]=mb.x;qa[B+5]=mb.y;qa[B+6]=mb.z;qa[B+7]=mb.w;qa[B+8]=nb.x;qa[B+9]=nb.y;qa[B+10]=nb.z;qa[B+11]=nb.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];oa[B]=zb.x;oa[B+1]=zb.y;oa[B+2]=zb.z;oa[B+3]=1;oa[B+4]=Ab.x;oa[B+5]=Ab.y;oa[B+6]=Ab.z;oa[B+7]=1;oa[B+8]=Bb.x;oa[B+9]=Bb.y;oa[B+10]=Bb.z;oa[B+11]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];pa[B]=Cb.x;pa[B+1]=Cb.y;pa[B+2]=Cb.z;pa[B+3]=1;pa[B+4]=Db.x;pa[B+5]=Db.y;pa[B+6]=Db.z;pa[B+7]=1;pa[B+8]=Eb.x;pa[B+
-9]=Eb.y;pa[B+10]=Eb.z;pa[B+11]=1;B=B+12}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];pc=Hb[D.d];ra[B]=ib.x;ra[B+1]=ib.y;ra[B+2]=ib.z;ra[B+3]=ib.w;ra[B+4]=jb.x;ra[B+5]=jb.y;ra[B+6]=jb.z;ra[B+7]=jb.w;ra[B+8]=kb.x;ra[B+9]=kb.y;ra[B+10]=kb.z;ra[B+11]=kb.w;ra[B+12]=pc.x;ra[B+13]=pc.y;ra[B+14]=pc.z;ra[B+15]=pc.w;lb=Ub[D.a];mb=Ub[D.b];nb=Ub[D.c];qc=Ub[D.d];qa[B]=lb.x;qa[B+1]=lb.y;qa[B+2]=lb.z;qa[B+3]=lb.w;qa[B+4]=mb.x;qa[B+5]=mb.y;qa[B+6]=mb.z;qa[B+7]=mb.w;qa[B+8]=nb.x;qa[B+
-9]=nb.y;qa[B+10]=nb.z;qa[B+11]=nb.w;qa[B+12]=qc.x;qa[B+13]=qc.y;qa[B+14]=qc.z;qa[B+15]=qc.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];Dc=Sb[D.d];oa[B]=zb.x;oa[B+1]=zb.y;oa[B+2]=zb.z;oa[B+3]=1;oa[B+4]=Ab.x;oa[B+5]=Ab.y;oa[B+6]=Ab.z;oa[B+7]=1;oa[B+8]=Bb.x;oa[B+9]=Bb.y;oa[B+10]=Bb.z;oa[B+11]=1;oa[B+12]=Dc.x;oa[B+13]=Dc.y;oa[B+14]=Dc.z;oa[B+15]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];Ec=Tb[D.d];pa[B]=Cb.x;pa[B+1]=Cb.y;pa[B+2]=Cb.z;pa[B+3]=1;pa[B+4]=Db.x;pa[B+5]=Db.y;pa[B+6]=Db.z;pa[B+7]=1;pa[B+8]=Eb.x;pa[B+9]=Eb.y;
-pa[B+10]=Eb.z;pa[B+11]=1;pa[B+12]=Ec.x;pa[B+13]=Ec.y;pa[B+14]=Ec.z;pa[B+15]=1;B=B+16}if(B>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinVertexABuffer);g.bufferData(g.ARRAY_BUFFER,oa,Pa);g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinVertexBBuffer);g.bufferData(g.ARRAY_BUFFER,pa,Pa);g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinIndicesBuffer);g.bufferData(g.ARRAY_BUFFER,qa,Pa);g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinWeightsBuffer);g.bufferData(g.ARRAY_BUFFER,ra,Pa)}}if(rd&&Yc){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];
-Ya=D.vertexColors;Cc=D.color;if(Ya.length===3&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2]}else hb=gb=fb=Cc;Fa[wa]=fb.r;Fa[wa+1]=fb.g;Fa[wa+2]=fb.b;Fa[wa+3]=gb.r;Fa[wa+4]=gb.g;Fa[wa+5]=gb.b;Fa[wa+6]=hb.r;Fa[wa+7]=hb.g;Fa[wa+8]=hb.b;wa=wa+9}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];Ya=D.vertexColors;Cc=D.color;if(Ya.length===4&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2];oc=Ya[3]}else oc=hb=gb=fb=Cc;Fa[wa]=fb.r;Fa[wa+1]=fb.g;Fa[wa+2]=fb.b;Fa[wa+3]=gb.r;Fa[wa+4]=gb.g;Fa[wa+5]=gb.b;Fa[wa+
-6]=hb.r;Fa[wa+7]=hb.g;Fa[wa+8]=hb.b;Fa[wa+9]=oc.r;Fa[wa+10]=oc.g;Fa[wa+11]=oc.b;wa=wa+12}if(wa>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Fa,Pa)}}if(qd&&La.hasTangents){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];rb=D.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];na[ha]=$a.x;na[ha+1]=$a.y;na[ha+2]=$a.z;na[ha+3]=$a.w;na[ha+4]=ab.x;na[ha+5]=ab.y;na[ha+6]=ab.z;na[ha+7]=ab.w;na[ha+8]=bb.x;na[ha+9]=bb.y;na[ha+10]=bb.z;na[ha+11]=bb.w;ha=ha+12}y=0;for(M=ca.length;y<M;y++){D=
-xa[ca[y]];rb=D.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];mc=rb[3];na[ha]=$a.x;na[ha+1]=$a.y;na[ha+2]=$a.z;na[ha+3]=$a.w;na[ha+4]=ab.x;na[ha+5]=ab.y;na[ha+6]=ab.z;na[ha+7]=ab.w;na[ha+8]=bb.x;na[ha+9]=bb.y;na[ha+10]=bb.z;na[ha+11]=bb.w;na[ha+12]=mc.x;na[ha+13]=mc.y;na[ha+14]=mc.z;na[ha+15]=mc.w;ha=ha+16}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglTangentBuffer);g.bufferData(g.ARRAY_BUFFER,na,Pa)}if(Qc&&fd){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===3&&Bc)for(fa=
-0;fa<3;fa++){Fb=ac[fa];Ta[Ha]=Fb.x;Ta[Ha+1]=Fb.y;Ta[Ha+2]=Fb.z;Ha=Ha+3}else for(fa=0;fa<3;fa++){Ta[Ha]=yb.x;Ta[Ha+1]=yb.y;Ta[Ha+2]=yb.z;Ha=Ha+3}}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===4&&Bc)for(fa=0;fa<4;fa++){Fb=ac[fa];Ta[Ha]=Fb.x;Ta[Ha+1]=Fb.y;Ta[Ha+2]=Fb.z;Ha=Ha+3}else for(fa=0;fa<4;fa++){Ta[Ha]=yb.x;Ta[Ha+1]=yb.y;Ta[Ha+2]=yb.z;Ha=Ha+3}}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglNormalBuffer);g.bufferData(g.ARRAY_BUFFER,Ta,Pa)}if(jd&&bd&&gd){y=0;for(M=
-ba.length;y<M;y++){Ua=ba[y];D=xa[Ua];bc=bd[Ua];if(bc!==void 0)for(fa=0;fa<3;fa++){dc=bc[fa];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}y=0;for(M=ca.length;y<M;y++){Ua=ca[y];D=xa[Ua];bc=bd[Ua];if(bc!==void 0)for(fa=0;fa<4;fa++){dc=bc[fa];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}if(tb>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglUVBuffer);g.bufferData(g.ARRAY_BUFFER,rc,Pa)}}if(jd&&cd&&gd){y=0;for(M=ba.length;y<M;y++){Ua=ba[y];D=xa[Ua];cc=cd[Ua];if(cc!==void 0)for(fa=0;fa<3;fa++){ec=cc[fa];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=
-ub+2}}y=0;for(M=ca.length;y<M;y++){Ua=ca[y];D=xa[Ua];cc=cd[Ua];if(cc!==void 0)for(fa=0;fa<4;fa++){ec=cc[fa];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}if(ub>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglUV2Buffer);g.bufferData(g.ARRAY_BUFFER,sc,Pa)}}if(Pc){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];ob[Sa]=va;ob[Sa+1]=va+1;ob[Sa+2]=va+2;Sa=Sa+3;Qa[Ka]=va;Qa[Ka+1]=va+1;Qa[Ka+2]=va;Qa[Ka+3]=va+2;Qa[Ka+4]=va+1;Qa[Ka+5]=va+2;Ka=Ka+6;va=va+3}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];ob[Sa]=va;ob[Sa+1]=va+1;ob[Sa+2]=va+
-3;ob[Sa+3]=va+1;ob[Sa+4]=va+2;ob[Sa+5]=va+3;Sa=Sa+6;Qa[Ka]=va;Qa[Ka+1]=va+1;Qa[Ka+2]=va;Qa[Ka+3]=va+3;Qa[Ka+4]=va+1;Qa[Ka+5]=va+2;Qa[Ka+6]=va+2;Qa[Ka+7]=va+3;Ka=Ka+8;va=va+4}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Z.__webglFaceBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,ob,Pa);g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Z.__webglLineBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Qa,Pa)}if(ad){fa=0;for(hd=ad.length;fa<hd;fa++){s=ad[fa];if(s.__original.needsUpdate){t=0;if(s.size===1)if(s.boundTo===void 0||s.boundTo===
-"vertices"){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];s.array[t]=s.value[D.a];s.array[t+1]=s.value[D.b];s.array[t+2]=s.value[D.c];t=t+3}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];s.array[t]=s.value[D.a];s.array[t+1]=s.value[D.b];s.array[t+2]=s.value[D.c];s.array[t+3]=s.value[D.d];t=t+4}}else{if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){ga=s.value[ba[y]];s.array[t]=ga;s.array[t+1]=ga;s.array[t+2]=ga;t=t+3}y=0;for(M=ca.length;y<M;y++){ga=s.value[ca[y]];s.array[t]=ga;s.array[t+1]=ga;s.array[t+2]=
-ga;s.array[t+3]=ga;t=t+4}}}else if(s.size===2)if(s.boundTo===void 0||s.boundTo==="vertices"){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;t=t+6}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];$=s.value[D.d];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;s.array[t+6]=$.x;
-s.array[t+7]=$.y;t=t+8}}else{if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){L=K=J=ga=s.value[ba[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;t=t+6}y=0;for(M=ca.length;y<M;y++){$=L=K=J=ga=s.value[ca[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;s.array[t+6]=$.x;s.array[t+7]=$.y;t=t+8}}}else if(s.size===3){var R;R=s.type==="c"?["r","g","b"]:["x","y","z"];if(s.boundTo===void 0||
-s.boundTo==="vertices"){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];t=t+9}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];$=s.value[D.d];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];
-s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];s.array[t+9]=$[R[0]];s.array[t+10]=$[R[1]];s.array[t+11]=$[R[2]];t=t+12}}else if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){L=K=J=ga=s.value[ba[y]];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];t=t+9}y=0;for(M=ca.length;y<M;y++){$=L=K=J=ga=s.value[ca[y]];s.array[t]=J[R[0]];
-s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];s.array[t+9]=$[R[0]];s.array[t+10]=$[R[1]];s.array[t+11]=$[R[2]];t=t+12}}else if(s.boundTo==="faceVertices"){y=0;for(M=ba.length;y<M;y++){ga=s.value[ba[y]];J=ga[0];K=ga[1];L=ga[2];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+
-7]=L[R[1]];s.array[t+8]=L[R[2]];t=t+9}y=0;for(M=ca.length;y<M;y++){ga=s.value[ca[y]];J=ga[0];K=ga[1];L=ga[2];$=ga[3];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];s.array[t+9]=$[R[0]];s.array[t+10]=$[R[1]];s.array[t+11]=$[R[2]];t=t+12}}}else if(s.size===4)if(s.boundTo===void 0||s.boundTo==="vertices"){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=s.value[D.a];K=
-s.value[D.b];L=s.value[D.c];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;t=t+12}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];$=s.value[D.d];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+
-9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;s.array[t+12]=$.x;s.array[t+13]=$.y;s.array[t+14]=$.z;s.array[t+15]=$.w;t=t+16}}else if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){L=K=J=ga=s.value[ba[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;t=t+12}y=0;for(M=ca.length;y<M;y++){$=L=K=J=ga=s.value[ca[y]];s.array[t]=J.x;s.array[t+1]=J.y;
-s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;s.array[t+12]=$.x;s.array[t+13]=$.y;s.array[t+14]=$.z;s.array[t+15]=$.w;t=t+16}}else if(s.boundTo==="faceVertices"){y=0;for(M=ba.length;y<M;y++){ga=s.value[ba[y]];J=ga[0];K=ga[1];L=ga[2];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+
-8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;t=t+12}y=0;for(M=ca.length;y<M;y++){ga=s.value[ca[y]];J=ga[0];K=ga[1];L=ga[2];$=ga[3];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;s.array[t+12]=$.x;s.array[t+13]=$.y;s.array[t+14]=$.z;s.array[t+15]=$.w;t=t+16}}g.bindBuffer(g.ARRAY_BUFFER,s.buffer);g.bufferData(g.ARRAY_BUFFER,s.array,
-Pa)}}}if(zc){delete Z.__inittedArrays;delete Z.__colorArray;delete Z.__normalArray;delete Z.__tangentArray;delete Z.__uvArray;delete Z.__uv2Array;delete Z.__faceArray;delete Z.__vertexArray;delete Z.__lineArray;delete Z.__skinVertexAArray;delete Z.__skinVertexBArray;delete Z.__skinIndexArray;delete Z.__skinWeightArray}}}}X.verticesNeedUpdate=false;X.morphTargetsNeedUpdate=false;X.elementsNeedUpdate=false;X.uvsNeedUpdate=false;X.normalsNeedUpdate=false;X.colorsNeedUpdate=false;X.tangentsNeedUpdate=
-false;Na.attributes&&o(Na)}else if(Xa instanceof THREE.Ribbon){if(X.verticesNeedUpdate||X.colorsNeedUpdate){var Jb=X,kd=g.DYNAMIC_DRAW,tc=void 0,uc=void 0,Gc=void 0,Kb=void 0,Hc=void 0,ld=Jb.vertices,md=Jb.colors,td=ld.length,ud=md.length,Ic=Jb.__vertexArray,Jc=Jb.__colorArray,vd=Jb.colorsNeedUpdate;if(Jb.verticesNeedUpdate){for(tc=0;tc<td;tc++){Gc=ld[tc];Kb=tc*3;Ic[Kb]=Gc.x;Ic[Kb+1]=Gc.y;Ic[Kb+2]=Gc.z}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Ic,kd)}if(vd){for(uc=
-0;uc<ud;uc++){Hc=md[uc];Kb=uc*3;Jc[Kb]=Hc.r;Jc[Kb+1]=Hc.g;Jc[Kb+2]=Hc.b}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Jc,kd)}}X.verticesNeedUpdate=false;X.colorsNeedUpdate=false}else if(Xa instanceof THREE.Line){Na=c(Xa,lc);Yb=Na.attributes&&n(Na);if(X.verticesNeedUpdate||X.colorsNeedUpdate||Yb){var vb=X,dd=g.DYNAMIC_DRAW,vc=void 0,wc=void 0,Kc=void 0,sa=void 0,Lc=void 0,nd=vb.vertices,od=vb.colors,wd=nd.length,xd=od.length,Mc=vb.__vertexArray,Nc=vb.__colorArray,yd=
-vb.colorsNeedUpdate,ed=vb.__webglCustomAttributesList,Oc=void 0,pd=void 0,Ga=void 0,fc=void 0,Oa=void 0,ka=void 0;if(vb.verticesNeedUpdate){for(vc=0;vc<wd;vc++){Kc=nd[vc];sa=vc*3;Mc[sa]=Kc.x;Mc[sa+1]=Kc.y;Mc[sa+2]=Kc.z}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Mc,dd)}if(yd){for(wc=0;wc<xd;wc++){Lc=od[wc];sa=wc*3;Nc[sa]=Lc.r;Nc[sa+1]=Lc.g;Nc[sa+2]=Lc.b}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Nc,dd)}if(ed){Oc=0;for(pd=ed.length;Oc<
-pd;Oc++){ka=ed[Oc];if(ka.needsUpdate&&(ka.boundTo===void 0||ka.boundTo==="vertices")){sa=0;fc=ka.value.length;if(ka.size===1)for(Ga=0;Ga<fc;Ga++)ka.array[Ga]=ka.value[Ga];else if(ka.size===2)for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.x;ka.array[sa+1]=Oa.y;sa=sa+2}else if(ka.size===3)if(ka.type==="c")for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.r;ka.array[sa+1]=Oa.g;ka.array[sa+2]=Oa.b;sa=sa+3}else for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.x;ka.array[sa+1]=Oa.y;ka.array[sa+
-2]=Oa.z;sa=sa+3}else if(ka.size===4)for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.x;ka.array[sa+1]=Oa.y;ka.array[sa+2]=Oa.z;ka.array[sa+3]=Oa.w;sa=sa+4}g.bindBuffer(g.ARRAY_BUFFER,ka.buffer);g.bufferData(g.ARRAY_BUFFER,ka.array,dd)}}}}X.verticesNeedUpdate=false;X.colorsNeedUpdate=false;Na.attributes&&o(Na)}else if(Xa instanceof THREE.ParticleSystem){Na=c(Xa,lc);Yb=Na.attributes&&n(Na);(X.verticesNeedUpdate||X.colorsNeedUpdate||Xa.sortParticles||Yb)&&f(X,g.DYNAMIC_DRAW,Xa);X.verticesNeedUpdate=
-false;X.colorsNeedUpdate=false;Na.attributes&&o(Na)}}};this.initMaterial=function(a,b,c,d){var e,f,h,i,j,k,l,m;a instanceof THREE.MeshDepthMaterial?m="depth":a instanceof THREE.MeshNormalMaterial?m="normal":a instanceof THREE.MeshBasicMaterial?m="basic":a instanceof THREE.MeshLambertMaterial?m="lambert":a instanceof THREE.MeshPhongMaterial?m="phong":a instanceof THREE.LineBasicMaterial?m="basic":a instanceof THREE.ParticleBasicMaterial&&(m="particle_basic");if(m){var n=THREE.ShaderLib[m];a.uniforms=
-THREE.UniformsUtils.clone(n.uniforms);a.vertexShader=n.vertexShader;a.fragmentShader=n.fragmentShader}var o,q;o=h=e=n=0;for(f=b.length;o<f;o++){q=b[o];if(!q.onlyShadow){q instanceof THREE.DirectionalLight&&h++;q instanceof THREE.PointLight&&e++;q instanceof THREE.SpotLight&&n++}}if(e+n+h<=V){o=h;f=e}else{o=Math.ceil(V*h/(e+h));n=f=V-o}e=o;h=n;n=l=0;for(o=b.length;n<o;n++){q=b[n];if(q.castShadow){q instanceof THREE.SpotLight&&l++;q instanceof THREE.DirectionalLight&&!q.shadowCascade&&l++}}if(hc&&d&&
-d.useVertexTexture)k=1024;else{b=g.getParameter(g.MAX_VERTEX_UNIFORM_VECTORS);b=Math.floor((b-20)/4);if(d!==void 0&&d instanceof THREE.SkinnedMesh){b=Math.min(d.bones.length,b);b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")}k=b}var p;a:{q=a.fragmentShader;o=a.vertexShader;var n=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,
-sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:k,useVertexTexture:hc&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:h,maxShadows:l,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,
-shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,doubleSided:a.doubleSided},r,d=[];if(m)d.push(m);else{d.push(q);d.push(o)}for(r in c){d.push(r);d.push(c[r])}m=d.join();r=0;for(d=ea.length;r<d;r++){e=ea[r];if(e.code===m){e.usedTimes++;p=e.program;break a}}r=g.createProgram();d=["precision "+C+" float;",jc?"#define VERTEX_TEXTURES":"",F.gammaInput?"#define GAMMA_INPUT":"",F.gammaOutput?"#define GAMMA_OUTPUT":"",F.physicallyBasedShading?
-"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):
-"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":
-"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
+F.info.render.points=F.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){g.drawArrays(g.TRIANGLE_STRIP,0,e.__webglVertexCount);F.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,j,m,n=a.__lights,o=a.fog;aa=-1;Wa=true;this.autoUpdateScene&&a.updateMatrixWorld();b.parent===void 0&&b.updateMatrixWorld();if(!b._viewMatrixArray)b._viewMatrixArray=new Float32Array(16);if(!b._projectionMatrixArray)b._projectionMatrixArray=new Float32Array(16);b.matrixWorldInverse.getInverse(b.matrixWorld);
+b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);Wb.multiply(b.projectionMatrix,b.matrixWorldInverse);ic.setFromMatrix(Wb);this.autoUpdateObjects&&this.initWebGLObjects(a);l(this.renderPluginsPre,a,b);F.info.render.calls=0;F.info.render.vertices=0;F.info.render.faces=0;F.info.render.points=0;this.setRenderTarget(c);(this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);m=a.__webglObjects;d=0;
+for(e=m.length;d<e;d++){f=m[d];j=f.object;f.render=false;if(j.visible&&(!(j instanceof THREE.Mesh||j instanceof THREE.ParticleSystem)||!j.frustumCulled||ic.contains(j))){p(j,b);var q=f,r=q.object,u=q.buffer,v=void 0,v=v=void 0,v=r.material;if(v instanceof THREE.MeshFaceMaterial){v=u.materialIndex;if(v>=0){v=r.geometry.materials[v];if(v.transparent){q.transparent=v;q.opaque=null}else{q.opaque=v;q.transparent=null}}}else if(v)if(v.transparent){q.transparent=v;q.opaque=null}else{q.opaque=v;q.transparent=
+null}f.render=true;if(this.sortObjects)if(j.renderDepth)f.z=j.renderDepth;else{pb.copy(j.matrixWorld.getPosition());Wb.multiplyVector3(pb);f.z=pb.z}}}this.sortObjects&&m.sort(h);m=a.__webglObjectsImmediate;d=0;for(e=m.length;d<e;d++){f=m[d];j=f.object;if(j.visible){p(j,b);j=f.object.material;if(j.transparent){f.transparent=j;f.opaque=null}else{f.opaque=j;f.transparent=null}}}if(a.overrideMaterial){d=a.overrideMaterial;this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst);this.setDepthTest(d.depthTest);
+this.setDepthWrite(d.depthWrite);x(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);k(a.__webglObjects,false,"",b,n,o,true,d);i(a.__webglObjectsImmediate,"",b,n,o,false,d)}else{this.setBlending(THREE.NormalBlending);k(a.__webglObjects,true,"opaque",b,n,o,false);i(a.__webglObjectsImmediate,"opaque",b,n,o,false);k(a.__webglObjects,false,"transparent",b,n,o,true);i(a.__webglObjectsImmediate,"transparent",b,n,o,true)}l(this.renderPluginsPost,a,b);if(c&&c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&
+c.minFilter!==THREE.LinearFilter)if(c instanceof THREE.WebGLRenderTargetCube){g.bindTexture(g.TEXTURE_CUBE_MAP,c.__webglTexture);g.generateMipmap(g.TEXTURE_CUBE_MAP);g.bindTexture(g.TEXTURE_CUBE_MAP,null)}else{g.bindTexture(g.TEXTURE_2D,c.__webglTexture);g.generateMipmap(g.TEXTURE_2D);g.bindTexture(g.TEXTURE_2D,null)}this.setDepthTest(true);this.setDepthWrite(true)};this.renderImmediateObject=function(a,b,c,d,e){var f=r(a,b,c,d,e);T=-1;F.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,
+g,ic):e.render(function(a){F.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){if(!a.__webglObjects){a.__webglObjects=[];a.__webglObjectsImmediate=[];a.__webglSprites=[];a.__webglFlares=[]}for(;a.__objectsAdded.length;){var h=a.__objectsAdded[0],i=a,j=void 0,k=void 0,l=void 0;if(!h.__webglInit){h.__webglInit=true;h._modelViewMatrix=new THREE.Matrix4;h._normalMatrix=new THREE.Matrix3;if(h instanceof THREE.Mesh){k=h.geometry;if(k instanceof THREE.Geometry){if(k.geometryGroups===void 0){var p=
+k,r=void 0,v=void 0,w=void 0,x=void 0,z=void 0,A=void 0,C=void 0,E={},H=p.morphTargets.length,P=p.morphNormals.length;p.geometryGroups={};r=0;for(v=p.faces.length;r<v;r++){w=p.faces[r];x=w.materialIndex;A=x!==void 0?x:-1;E[A]===void 0&&(E[A]={hash:A,counter:0});C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:P});z=w instanceof THREE.Face3?3:4;if(p.geometryGroups[C].vertices+z>65535){E[A].counter=
+E[A].counter+1;C=E[A].hash+"_"+E[A].counter;p.geometryGroups[C]===void 0&&(p.geometryGroups[C]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:H,numMorphNormals:P})}w instanceof THREE.Face3?p.geometryGroups[C].faces3.push(r):p.geometryGroups[C].faces4.push(r);p.geometryGroups[C].vertices=p.geometryGroups[C].vertices+z}p.geometryGroupsList=[];var O=void 0;for(O in p.geometryGroups){p.geometryGroups[O].id=ta++;p.geometryGroupsList.push(p.geometryGroups[O])}}for(j in k.geometryGroups){l=
+k.geometryGroups[j];if(!l.__webglVertexBuffer){var G=l;G.__webglVertexBuffer=g.createBuffer();G.__webglNormalBuffer=g.createBuffer();G.__webglTangentBuffer=g.createBuffer();G.__webglColorBuffer=g.createBuffer();G.__webglUVBuffer=g.createBuffer();G.__webglUV2Buffer=g.createBuffer();G.__webglSkinVertexABuffer=g.createBuffer();G.__webglSkinVertexBBuffer=g.createBuffer();G.__webglSkinIndicesBuffer=g.createBuffer();G.__webglSkinWeightsBuffer=g.createBuffer();G.__webglFaceBuffer=g.createBuffer();G.__webglLineBuffer=
+g.createBuffer();var N=void 0,Q=void 0;if(G.numMorphTargets){G.__webglMorphTargetsBuffers=[];N=0;for(Q=G.numMorphTargets;N<Q;N++)G.__webglMorphTargetsBuffers.push(g.createBuffer())}if(G.numMorphNormals){G.__webglMorphNormalsBuffers=[];N=0;for(Q=G.numMorphNormals;N<Q;N++)G.__webglMorphNormalsBuffers.push(g.createBuffer())}F.info.memory.geometries++;var I=l,S=h,T=S.geometry,U=I.faces3,W=I.faces4,V=U.length*3+W.length*4,da=U.length*1+W.length*2,ea=U.length*3+W.length*4,aa=c(S,I),ia=e(aa),la=d(aa),ua=
+aa.vertexColors?aa.vertexColors:false;I.__vertexArray=new Float32Array(V*3);if(la)I.__normalArray=new Float32Array(V*3);if(T.hasTangents)I.__tangentArray=new Float32Array(V*4);if(ua)I.__colorArray=new Float32Array(V*3);if(ia){if(T.faceUvs.length>0||T.faceVertexUvs.length>0)I.__uvArray=new Float32Array(V*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>1)I.__uv2Array=new Float32Array(V*2)}if(S.geometry.skinWeights.length&&S.geometry.skinIndices.length){I.__skinVertexAArray=new Float32Array(V*4);I.__skinVertexBArray=
+new Float32Array(V*4);I.__skinIndexArray=new Float32Array(V*4);I.__skinWeightArray=new Float32Array(V*4)}I.__faceArray=new Uint16Array(da*3);I.__lineArray=new Uint16Array(ea*2);var ja=void 0,Lb=void 0;if(I.numMorphTargets){I.__morphTargetsArrays=[];ja=0;for(Lb=I.numMorphTargets;ja<Lb;ja++)I.__morphTargetsArrays.push(new Float32Array(V*3))}if(I.numMorphNormals){I.__morphNormalsArrays=[];ja=0;for(Lb=I.numMorphNormals;ja<Lb;ja++)I.__morphNormalsArrays.push(new Float32Array(V*3))}I.__webglFaceCount=da*
+3;I.__webglLineCount=ea*2;if(aa.attributes){if(I.__webglCustomAttributesList===void 0)I.__webglCustomAttributesList=[];var Ca=void 0;for(Ca in aa.attributes){var Ba=aa.attributes[Ca],ma={},Ja;for(Ja in Ba)ma[Ja]=Ba[Ja];if(!ma.__webglInitialized||ma.createUniqueBuffers){ma.__webglInitialized=true;var Ia=1;ma.type==="v2"?Ia=2:ma.type==="v3"?Ia=3:ma.type==="v4"?Ia=4:ma.type==="c"&&(Ia=3);ma.size=Ia;ma.array=new Float32Array(V*Ia);ma.buffer=g.createBuffer();ma.buffer.belongsToAttribute=Ca;Ba.needsUpdate=
+true;ma.__original=Ba}I.__webglCustomAttributesList.push(ma)}}I.__inittedArrays=true;k.verticesNeedUpdate=true;k.morphTargetsNeedUpdate=true;k.elementsNeedUpdate=true;k.uvsNeedUpdate=true;k.normalsNeedUpdate=true;k.tangentsNeedUpdate=true;k.colorsNeedUpdate=true}}}else if(k instanceof THREE.BufferGeometry){var Mb=k,Ma=void 0,xb=void 0,Va=void 0;for(Ma in Mb.attributes){Va=Ma==="index"?g.ELEMENT_ARRAY_BUFFER:g.ARRAY_BUFFER;xb=Mb.attributes[Ma];xb.buffer=g.createBuffer();g.bindBuffer(Va,xb.buffer);
+g.bufferData(Va,xb.array,g.STATIC_DRAW)}}}else if(h instanceof THREE.Ribbon){k=h.geometry;if(!k.__webglVertexBuffer){var pb=k;pb.__webglVertexBuffer=g.createBuffer();pb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var Wa=k,Za=Wa.vertices.length;Wa.__vertexArray=new Float32Array(Za*3);Wa.__colorArray=new Float32Array(Za*3);Wa.__webglVertexCount=Za;k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.Line){k=h.geometry;if(!k.__webglVertexBuffer){var wb=k;wb.__webglVertexBuffer=
+g.createBuffer();wb.__webglColorBuffer=g.createBuffer();F.info.memory.geometries++;var kc=k,Wb=h,Nb=kc.vertices.length;kc.__vertexArray=new Float32Array(Nb*3);kc.__colorArray=new Float32Array(Nb*3);kc.__webglLineCount=Nb;b(kc,Wb);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.ParticleSystem){k=h.geometry;if(!k.__webglVertexBuffer){var Vb=k;Vb.__webglVertexBuffer=g.createBuffer();Vb.__webglColorBuffer=g.createBuffer();F.info.geometries++;var Xb=k,hc=h,Ob=Xb.vertices.length;
+Xb.__vertexArray=new Float32Array(Ob*3);Xb.__colorArray=new Float32Array(Ob*3);Xb.__sortArray=[];Xb.__webglParticleCount=Ob;b(Xb,hc);k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}}if(!h.__webglActive){if(h instanceof THREE.Mesh){k=h.geometry;if(k instanceof THREE.BufferGeometry)m(i.__webglObjects,k,h);else for(j in k.geometryGroups){l=k.geometryGroups[j];m(i.__webglObjects,l,h)}}else if(h instanceof THREE.Ribbon||h instanceof THREE.Line||h instanceof THREE.ParticleSystem){k=h.geometry;m(i.__webglObjects,
+k,h)}else h instanceof THREE.ImmediateRenderObject||h.immediateRenderCallback?i.__webglObjectsImmediate.push({object:h,opaque:null,transparent:null}):h instanceof THREE.Sprite?i.__webglSprites.push(h):h instanceof THREE.LensFlare&&i.__webglFlares.push(h);h.__webglActive=true}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var Ra=a.__objectsRemoved[0],Ac=a;Ra instanceof THREE.Mesh||Ra instanceof THREE.ParticleSystem||Ra instanceof THREE.Ribbon||Ra instanceof THREE.Line?u(Ac.__webglObjects,
+Ra):Ra instanceof THREE.Sprite?q(Ac.__webglSprites,Ra):Ra instanceof THREE.LensFlare?q(Ac.__webglFlares,Ra):(Ra instanceof THREE.ImmediateRenderObject||Ra.immediateRenderCallback)&&u(Ac.__webglObjectsImmediate,Ra);Ra.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var Pb=0,ic=a.__webglObjects.length;Pb<ic;Pb++){var Xa=a.__webglObjects[Pb].object,X=Xa.geometry,lc=void 0,Yb=void 0,Na=void 0;if(Xa instanceof THREE.Mesh)if(X instanceof THREE.BufferGeometry){if(X.verticesNeedUpdate||X.elementsNeedUpdate||
+X.uvsNeedUpdate||X.normalsNeedUpdate||X.colorsNeedUpdate||X.tangentsNeedUpdate){var qb=X,Zb=g.DYNAMIC_DRAW,jc=!X.dynamic,$b=qb.attributes,Rc=$b.index,Sc=$b.position,Tc=$b.normal,Uc=$b.uv,Vc=$b.color,Wc=$b.tangent;if(qb.elementsNeedUpdate&&Rc!==void 0){g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Rc.buffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Rc.array,Zb)}if(qb.verticesNeedUpdate&&Sc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Sc.buffer);g.bufferData(g.ARRAY_BUFFER,Sc.array,Zb)}if(qb.normalsNeedUpdate&&Tc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,
+Tc.buffer);g.bufferData(g.ARRAY_BUFFER,Tc.array,Zb)}if(qb.uvsNeedUpdate&&Uc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Uc.buffer);g.bufferData(g.ARRAY_BUFFER,Uc.array,Zb)}if(qb.colorsNeedUpdate&&Vc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Vc.buffer);g.bufferData(g.ARRAY_BUFFER,Vc.array,Zb)}if(qb.tangentsNeedUpdate&&Wc!==void 0){g.bindBuffer(g.ARRAY_BUFFER,Wc.buffer);g.bufferData(g.ARRAY_BUFFER,Wc.array,Zb)}if(jc){var gc=void 0;for(gc in qb.attributes)delete qb.attributes[gc].array}}X.verticesNeedUpdate=false;
+X.elementsNeedUpdate=false;X.uvsNeedUpdate=false;X.normalsNeedUpdate=false;X.colorsNeedUpdate=false;X.tangentsNeedUpdate=false}else{for(var Xc=0,xc=X.geometryGroupsList.length;Xc<xc;Xc++){lc=X.geometryGroupsList[Xc];Na=c(Xa,lc);Yb=Na.attributes&&n(Na);if(X.verticesNeedUpdate||X.morphTargetsNeedUpdate||X.elementsNeedUpdate||X.uvsNeedUpdate||X.normalsNeedUpdate||X.colorsNeedUpdate||X.tangentsNeedUpdate||Yb){var Z=lc,yc=Xa,Pa=g.DYNAMIC_DRAW,zc=!X.dynamic,Qb=Na;if(Z.__inittedArrays){var fd=d(Qb),Yc=Qb.vertexColors?
+Qb.vertexColors:false,gd=e(Qb),Bc=fd===THREE.SmoothShading,y=void 0,M=void 0,Ua=void 0,D=void 0,ac=void 0,yb=void 0,Ya=void 0,Cc=void 0,rb=void 0,bc=void 0,cc=void 0,J=void 0,K=void 0,L=void 0,$=void 0,$a=void 0,ab=void 0,bb=void 0,mc=void 0,cb=void 0,db=void 0,eb=void 0,nc=void 0,fb=void 0,gb=void 0,hb=void 0,oc=void 0,ib=void 0,jb=void 0,kb=void 0,pc=void 0,lb=void 0,mb=void 0,nb=void 0,qc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Dc=void 0,Cb=void 0,Db=void 0,Eb=void 0,Ec=void 0,fa=void 0,hd=void 0,
+Fb=void 0,dc=void 0,ec=void 0,Da=void 0,id=void 0,za=void 0,Aa=void 0,Gb=void 0,sb=void 0,va=0,ya=0,tb=0,ub=0,Sa=0,Ha=0,ha=0,Ka=0,wa=0,B=0,Y=0,t=0,ga=void 0,Ea=Z.__vertexArray,rc=Z.__uvArray,sc=Z.__uv2Array,Ta=Z.__normalArray,na=Z.__tangentArray,Fa=Z.__colorArray,oa=Z.__skinVertexAArray,pa=Z.__skinVertexBArray,qa=Z.__skinIndexArray,ra=Z.__skinWeightArray,Zc=Z.__morphTargetsArrays,$c=Z.__morphNormalsArrays,ad=Z.__webglCustomAttributesList,s=void 0,ob=Z.__faceArray,Qa=Z.__lineArray,La=yc.geometry,Pc=
+La.elementsNeedUpdate,jd=La.uvsNeedUpdate,Qc=La.normalsNeedUpdate,qd=La.tangentsNeedUpdate,rd=La.colorsNeedUpdate,sd=La.morphTargetsNeedUpdate,Rb=La.vertices,ba=Z.faces3,ca=Z.faces4,xa=La.faces,bd=La.faceVertexUvs[0],cd=La.faceVertexUvs[1],Sb=La.skinVerticesA,Tb=La.skinVerticesB,Ub=La.skinIndices,Hb=La.skinWeights,Ib=La.morphTargets,Fc=La.morphNormals;if(La.verticesNeedUpdate){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=Rb[D.a];K=Rb[D.b];L=Rb[D.c];Ea[ya]=J.x;Ea[ya+1]=J.y;Ea[ya+2]=J.z;Ea[ya+3]=K.x;
+Ea[ya+4]=K.y;Ea[ya+5]=K.z;Ea[ya+6]=L.x;Ea[ya+7]=L.y;Ea[ya+8]=L.z;ya=ya+9}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=Rb[D.a];K=Rb[D.b];L=Rb[D.c];$=Rb[D.d];Ea[ya]=J.x;Ea[ya+1]=J.y;Ea[ya+2]=J.z;Ea[ya+3]=K.x;Ea[ya+4]=K.y;Ea[ya+5]=K.z;Ea[ya+6]=L.x;Ea[ya+7]=L.y;Ea[ya+8]=L.z;Ea[ya+9]=$.x;Ea[ya+10]=$.y;Ea[ya+11]=$.z;ya=ya+12}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Ea,Pa)}if(sd){Da=0;for(id=Ib.length;Da<id;Da++){y=Y=0;for(M=ba.length;y<M;y++){Gb=ba[y];D=xa[Gb];J=Ib[Da].vertices[D.a];
+K=Ib[Da].vertices[D.b];L=Ib[Da].vertices[D.c];za=Zc[Da];za[Y]=J.x;za[Y+1]=J.y;za[Y+2]=J.z;za[Y+3]=K.x;za[Y+4]=K.y;za[Y+5]=K.z;za[Y+6]=L.x;za[Y+7]=L.y;za[Y+8]=L.z;if(Qb.morphNormals){if(Bc){sb=Fc[Da].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c}else eb=db=cb=Fc[Da].faceNormals[Gb];Aa=$c[Da];Aa[Y]=cb.x;Aa[Y+1]=cb.y;Aa[Y+2]=cb.z;Aa[Y+3]=db.x;Aa[Y+4]=db.y;Aa[Y+5]=db.z;Aa[Y+6]=eb.x;Aa[Y+7]=eb.y;Aa[Y+8]=eb.z}Y=Y+9}y=0;for(M=ca.length;y<M;y++){Gb=ca[y];D=xa[Gb];J=Ib[Da].vertices[D.a];K=Ib[Da].vertices[D.b];
+L=Ib[Da].vertices[D.c];$=Ib[Da].vertices[D.d];za=Zc[Da];za[Y]=J.x;za[Y+1]=J.y;za[Y+2]=J.z;za[Y+3]=K.x;za[Y+4]=K.y;za[Y+5]=K.z;za[Y+6]=L.x;za[Y+7]=L.y;za[Y+8]=L.z;za[Y+9]=$.x;za[Y+10]=$.y;za[Y+11]=$.z;if(Qb.morphNormals){if(Bc){sb=Fc[Da].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c;nc=sb.d}else nc=eb=db=cb=Fc[Da].faceNormals[Gb];Aa=$c[Da];Aa[Y]=cb.x;Aa[Y+1]=cb.y;Aa[Y+2]=cb.z;Aa[Y+3]=db.x;Aa[Y+4]=db.y;Aa[Y+5]=db.z;Aa[Y+6]=eb.x;Aa[Y+7]=eb.y;Aa[Y+8]=eb.z;Aa[Y+9]=nc.x;Aa[Y+10]=nc.y;Aa[Y+11]=nc.z}Y=Y+12}g.bindBuffer(g.ARRAY_BUFFER,
+Z.__webglMorphTargetsBuffers[Da]);g.bufferData(g.ARRAY_BUFFER,Zc[Da],Pa);if(Qb.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglMorphNormalsBuffers[Da]);g.bufferData(g.ARRAY_BUFFER,$c[Da],Pa)}}}if(Hb.length){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];ra[B]=ib.x;ra[B+1]=ib.y;ra[B+2]=ib.z;ra[B+3]=ib.w;ra[B+4]=jb.x;ra[B+5]=jb.y;ra[B+6]=jb.z;ra[B+7]=jb.w;ra[B+8]=kb.x;ra[B+9]=kb.y;ra[B+10]=kb.z;ra[B+11]=kb.w;lb=Ub[D.a];mb=Ub[D.b];nb=Ub[D.c];qa[B]=lb.x;qa[B+1]=lb.y;qa[B+
+2]=lb.z;qa[B+3]=lb.w;qa[B+4]=mb.x;qa[B+5]=mb.y;qa[B+6]=mb.z;qa[B+7]=mb.w;qa[B+8]=nb.x;qa[B+9]=nb.y;qa[B+10]=nb.z;qa[B+11]=nb.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];oa[B]=zb.x;oa[B+1]=zb.y;oa[B+2]=zb.z;oa[B+3]=1;oa[B+4]=Ab.x;oa[B+5]=Ab.y;oa[B+6]=Ab.z;oa[B+7]=1;oa[B+8]=Bb.x;oa[B+9]=Bb.y;oa[B+10]=Bb.z;oa[B+11]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];pa[B]=Cb.x;pa[B+1]=Cb.y;pa[B+2]=Cb.z;pa[B+3]=1;pa[B+4]=Db.x;pa[B+5]=Db.y;pa[B+6]=Db.z;pa[B+7]=1;pa[B+8]=Eb.x;pa[B+9]=Eb.y;pa[B+10]=Eb.z;pa[B+11]=1;B=B+12}y=0;for(M=
+ca.length;y<M;y++){D=xa[ca[y]];ib=Hb[D.a];jb=Hb[D.b];kb=Hb[D.c];pc=Hb[D.d];ra[B]=ib.x;ra[B+1]=ib.y;ra[B+2]=ib.z;ra[B+3]=ib.w;ra[B+4]=jb.x;ra[B+5]=jb.y;ra[B+6]=jb.z;ra[B+7]=jb.w;ra[B+8]=kb.x;ra[B+9]=kb.y;ra[B+10]=kb.z;ra[B+11]=kb.w;ra[B+12]=pc.x;ra[B+13]=pc.y;ra[B+14]=pc.z;ra[B+15]=pc.w;lb=Ub[D.a];mb=Ub[D.b];nb=Ub[D.c];qc=Ub[D.d];qa[B]=lb.x;qa[B+1]=lb.y;qa[B+2]=lb.z;qa[B+3]=lb.w;qa[B+4]=mb.x;qa[B+5]=mb.y;qa[B+6]=mb.z;qa[B+7]=mb.w;qa[B+8]=nb.x;qa[B+9]=nb.y;qa[B+10]=nb.z;qa[B+11]=nb.w;qa[B+12]=qc.x;
+qa[B+13]=qc.y;qa[B+14]=qc.z;qa[B+15]=qc.w;zb=Sb[D.a];Ab=Sb[D.b];Bb=Sb[D.c];Dc=Sb[D.d];oa[B]=zb.x;oa[B+1]=zb.y;oa[B+2]=zb.z;oa[B+3]=1;oa[B+4]=Ab.x;oa[B+5]=Ab.y;oa[B+6]=Ab.z;oa[B+7]=1;oa[B+8]=Bb.x;oa[B+9]=Bb.y;oa[B+10]=Bb.z;oa[B+11]=1;oa[B+12]=Dc.x;oa[B+13]=Dc.y;oa[B+14]=Dc.z;oa[B+15]=1;Cb=Tb[D.a];Db=Tb[D.b];Eb=Tb[D.c];Ec=Tb[D.d];pa[B]=Cb.x;pa[B+1]=Cb.y;pa[B+2]=Cb.z;pa[B+3]=1;pa[B+4]=Db.x;pa[B+5]=Db.y;pa[B+6]=Db.z;pa[B+7]=1;pa[B+8]=Eb.x;pa[B+9]=Eb.y;pa[B+10]=Eb.z;pa[B+11]=1;pa[B+12]=Ec.x;pa[B+13]=Ec.y;
+pa[B+14]=Ec.z;pa[B+15]=1;B=B+16}if(B>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinVertexABuffer);g.bufferData(g.ARRAY_BUFFER,oa,Pa);g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinVertexBBuffer);g.bufferData(g.ARRAY_BUFFER,pa,Pa);g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinIndicesBuffer);g.bufferData(g.ARRAY_BUFFER,qa,Pa);g.bindBuffer(g.ARRAY_BUFFER,Z.__webglSkinWeightsBuffer);g.bufferData(g.ARRAY_BUFFER,ra,Pa)}}if(rd&&Yc){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];Ya=D.vertexColors;Cc=D.color;if(Ya.length===
+3&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2]}else hb=gb=fb=Cc;Fa[wa]=fb.r;Fa[wa+1]=fb.g;Fa[wa+2]=fb.b;Fa[wa+3]=gb.r;Fa[wa+4]=gb.g;Fa[wa+5]=gb.b;Fa[wa+6]=hb.r;Fa[wa+7]=hb.g;Fa[wa+8]=hb.b;wa=wa+9}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];Ya=D.vertexColors;Cc=D.color;if(Ya.length===4&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2];oc=Ya[3]}else oc=hb=gb=fb=Cc;Fa[wa]=fb.r;Fa[wa+1]=fb.g;Fa[wa+2]=fb.b;Fa[wa+3]=gb.r;Fa[wa+4]=gb.g;Fa[wa+5]=gb.b;Fa[wa+6]=hb.r;Fa[wa+7]=hb.g;Fa[wa+8]=hb.b;Fa[wa+
+9]=oc.r;Fa[wa+10]=oc.g;Fa[wa+11]=oc.b;wa=wa+12}if(wa>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Fa,Pa)}}if(qd&&La.hasTangents){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];rb=D.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];na[ha]=$a.x;na[ha+1]=$a.y;na[ha+2]=$a.z;na[ha+3]=$a.w;na[ha+4]=ab.x;na[ha+5]=ab.y;na[ha+6]=ab.z;na[ha+7]=ab.w;na[ha+8]=bb.x;na[ha+9]=bb.y;na[ha+10]=bb.z;na[ha+11]=bb.w;ha=ha+12}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];rb=D.vertexTangents;$a=rb[0];ab=
+rb[1];bb=rb[2];mc=rb[3];na[ha]=$a.x;na[ha+1]=$a.y;na[ha+2]=$a.z;na[ha+3]=$a.w;na[ha+4]=ab.x;na[ha+5]=ab.y;na[ha+6]=ab.z;na[ha+7]=ab.w;na[ha+8]=bb.x;na[ha+9]=bb.y;na[ha+10]=bb.z;na[ha+11]=bb.w;na[ha+12]=mc.x;na[ha+13]=mc.y;na[ha+14]=mc.z;na[ha+15]=mc.w;ha=ha+16}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglTangentBuffer);g.bufferData(g.ARRAY_BUFFER,na,Pa)}if(Qc&&fd){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===3&&Bc)for(fa=0;fa<3;fa++){Fb=ac[fa];Ta[Ha]=Fb.x;Ta[Ha+1]=
+Fb.y;Ta[Ha+2]=Fb.z;Ha=Ha+3}else for(fa=0;fa<3;fa++){Ta[Ha]=yb.x;Ta[Ha+1]=yb.y;Ta[Ha+2]=yb.z;Ha=Ha+3}}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];ac=D.vertexNormals;yb=D.normal;if(ac.length===4&&Bc)for(fa=0;fa<4;fa++){Fb=ac[fa];Ta[Ha]=Fb.x;Ta[Ha+1]=Fb.y;Ta[Ha+2]=Fb.z;Ha=Ha+3}else for(fa=0;fa<4;fa++){Ta[Ha]=yb.x;Ta[Ha+1]=yb.y;Ta[Ha+2]=yb.z;Ha=Ha+3}}g.bindBuffer(g.ARRAY_BUFFER,Z.__webglNormalBuffer);g.bufferData(g.ARRAY_BUFFER,Ta,Pa)}if(jd&&bd&&gd){y=0;for(M=ba.length;y<M;y++){Ua=ba[y];D=xa[Ua];bc=bd[Ua];
+if(bc!==void 0)for(fa=0;fa<3;fa++){dc=bc[fa];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}y=0;for(M=ca.length;y<M;y++){Ua=ca[y];D=xa[Ua];bc=bd[Ua];if(bc!==void 0)for(fa=0;fa<4;fa++){dc=bc[fa];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}if(tb>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglUVBuffer);g.bufferData(g.ARRAY_BUFFER,rc,Pa)}}if(jd&&cd&&gd){y=0;for(M=ba.length;y<M;y++){Ua=ba[y];D=xa[Ua];cc=cd[Ua];if(cc!==void 0)for(fa=0;fa<3;fa++){ec=cc[fa];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}y=0;for(M=ca.length;y<M;y++){Ua=ca[y];D=
+xa[Ua];cc=cd[Ua];if(cc!==void 0)for(fa=0;fa<4;fa++){ec=cc[fa];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}if(ub>0){g.bindBuffer(g.ARRAY_BUFFER,Z.__webglUV2Buffer);g.bufferData(g.ARRAY_BUFFER,sc,Pa)}}if(Pc){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];ob[Sa]=va;ob[Sa+1]=va+1;ob[Sa+2]=va+2;Sa=Sa+3;Qa[Ka]=va;Qa[Ka+1]=va+1;Qa[Ka+2]=va;Qa[Ka+3]=va+2;Qa[Ka+4]=va+1;Qa[Ka+5]=va+2;Ka=Ka+6;va=va+3}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];ob[Sa]=va;ob[Sa+1]=va+1;ob[Sa+2]=va+3;ob[Sa+3]=va+1;ob[Sa+4]=va+2;ob[Sa+5]=va+3;Sa=
+Sa+6;Qa[Ka]=va;Qa[Ka+1]=va+1;Qa[Ka+2]=va;Qa[Ka+3]=va+3;Qa[Ka+4]=va+1;Qa[Ka+5]=va+2;Qa[Ka+6]=va+2;Qa[Ka+7]=va+3;Ka=Ka+8;va=va+4}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Z.__webglFaceBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,ob,Pa);g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Z.__webglLineBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,Qa,Pa)}if(ad){fa=0;for(hd=ad.length;fa<hd;fa++){s=ad[fa];if(s.__original.needsUpdate){t=0;if(s.size===1)if(s.boundTo===void 0||s.boundTo==="vertices"){y=0;for(M=ba.length;y<M;y++){D=
+xa[ba[y]];s.array[t]=s.value[D.a];s.array[t+1]=s.value[D.b];s.array[t+2]=s.value[D.c];t=t+3}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];s.array[t]=s.value[D.a];s.array[t+1]=s.value[D.b];s.array[t+2]=s.value[D.c];s.array[t+3]=s.value[D.d];t=t+4}}else{if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){ga=s.value[ba[y]];s.array[t]=ga;s.array[t+1]=ga;s.array[t+2]=ga;t=t+3}y=0;for(M=ca.length;y<M;y++){ga=s.value[ca[y]];s.array[t]=ga;s.array[t+1]=ga;s.array[t+2]=ga;s.array[t+3]=ga;t=t+4}}}else if(s.size===
+2)if(s.boundTo===void 0||s.boundTo==="vertices"){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;t=t+6}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];$=s.value[D.d];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;s.array[t+6]=$.x;s.array[t+7]=$.y;t=t+8}}else{if(s.boundTo===
+"faces"){y=0;for(M=ba.length;y<M;y++){L=K=J=ga=s.value[ba[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;t=t+6}y=0;for(M=ca.length;y<M;y++){$=L=K=J=ga=s.value[ca[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=K.x;s.array[t+3]=K.y;s.array[t+4]=L.x;s.array[t+5]=L.y;s.array[t+6]=$.x;s.array[t+7]=$.y;t=t+8}}}else if(s.size===3){var R;R=s.type==="c"?["r","g","b"]:["x","y","z"];if(s.boundTo===void 0||s.boundTo==="vertices"){y=0;for(M=ba.length;y<
+M;y++){D=xa[ba[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];t=t+9}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];$=s.value[D.d];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];
+s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];s.array[t+9]=$[R[0]];s.array[t+10]=$[R[1]];s.array[t+11]=$[R[2]];t=t+12}}else if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){L=K=J=ga=s.value[ba[y]];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];t=t+9}y=0;for(M=ca.length;y<M;y++){$=L=K=J=ga=s.value[ca[y]];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];
+s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];s.array[t+9]=$[R[0]];s.array[t+10]=$[R[1]];s.array[t+11]=$[R[2]];t=t+12}}else if(s.boundTo==="faceVertices"){y=0;for(M=ba.length;y<M;y++){ga=s.value[ba[y]];J=ga[0];K=ga[1];L=ga[2];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];t=t+9}y=
+0;for(M=ca.length;y<M;y++){ga=s.value[ca[y]];J=ga[0];K=ga[1];L=ga[2];$=ga[3];s.array[t]=J[R[0]];s.array[t+1]=J[R[1]];s.array[t+2]=J[R[2]];s.array[t+3]=K[R[0]];s.array[t+4]=K[R[1]];s.array[t+5]=K[R[2]];s.array[t+6]=L[R[0]];s.array[t+7]=L[R[1]];s.array[t+8]=L[R[2]];s.array[t+9]=$[R[0]];s.array[t+10]=$[R[1]];s.array[t+11]=$[R[2]];t=t+12}}}else if(s.size===4)if(s.boundTo===void 0||s.boundTo==="vertices"){y=0;for(M=ba.length;y<M;y++){D=xa[ba[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];s.array[t]=
+J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;t=t+12}y=0;for(M=ca.length;y<M;y++){D=xa[ca[y]];J=s.value[D.a];K=s.value[D.b];L=s.value[D.c];$=s.value[D.d];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=
+L.w;s.array[t+12]=$.x;s.array[t+13]=$.y;s.array[t+14]=$.z;s.array[t+15]=$.w;t=t+16}}else if(s.boundTo==="faces"){y=0;for(M=ba.length;y<M;y++){L=K=J=ga=s.value[ba[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;t=t+12}y=0;for(M=ca.length;y<M;y++){$=L=K=J=ga=s.value[ca[y]];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+
+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;s.array[t+12]=$.x;s.array[t+13]=$.y;s.array[t+14]=$.z;s.array[t+15]=$.w;t=t+16}}else if(s.boundTo==="faceVertices"){y=0;for(M=ba.length;y<M;y++){ga=s.value[ba[y]];J=ga[0];K=ga[1];L=ga[2];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;
+s.array[t+11]=L.w;t=t+12}y=0;for(M=ca.length;y<M;y++){ga=s.value[ca[y]];J=ga[0];K=ga[1];L=ga[2];$=ga[3];s.array[t]=J.x;s.array[t+1]=J.y;s.array[t+2]=J.z;s.array[t+3]=J.w;s.array[t+4]=K.x;s.array[t+5]=K.y;s.array[t+6]=K.z;s.array[t+7]=K.w;s.array[t+8]=L.x;s.array[t+9]=L.y;s.array[t+10]=L.z;s.array[t+11]=L.w;s.array[t+12]=$.x;s.array[t+13]=$.y;s.array[t+14]=$.z;s.array[t+15]=$.w;t=t+16}}g.bindBuffer(g.ARRAY_BUFFER,s.buffer);g.bufferData(g.ARRAY_BUFFER,s.array,Pa)}}}if(zc){delete Z.__inittedArrays;delete Z.__colorArray;
+delete Z.__normalArray;delete Z.__tangentArray;delete Z.__uvArray;delete Z.__uv2Array;delete Z.__faceArray;delete Z.__vertexArray;delete Z.__lineArray;delete Z.__skinVertexAArray;delete Z.__skinVertexBArray;delete Z.__skinIndexArray;delete Z.__skinWeightArray}}}}X.verticesNeedUpdate=false;X.morphTargetsNeedUpdate=false;X.elementsNeedUpdate=false;X.uvsNeedUpdate=false;X.normalsNeedUpdate=false;X.colorsNeedUpdate=false;X.tangentsNeedUpdate=false;Na.attributes&&o(Na)}else if(Xa instanceof THREE.Ribbon){if(X.verticesNeedUpdate||
+X.colorsNeedUpdate){var Jb=X,kd=g.DYNAMIC_DRAW,tc=void 0,uc=void 0,Gc=void 0,Kb=void 0,Hc=void 0,ld=Jb.vertices,md=Jb.colors,td=ld.length,ud=md.length,Ic=Jb.__vertexArray,Jc=Jb.__colorArray,vd=Jb.colorsNeedUpdate;if(Jb.verticesNeedUpdate){for(tc=0;tc<td;tc++){Gc=ld[tc];Kb=tc*3;Ic[Kb]=Gc.x;Ic[Kb+1]=Gc.y;Ic[Kb+2]=Gc.z}g.bindBuffer(g.ARRAY_BUFFER,Jb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Ic,kd)}if(vd){for(uc=0;uc<ud;uc++){Hc=md[uc];Kb=uc*3;Jc[Kb]=Hc.r;Jc[Kb+1]=Hc.g;Jc[Kb+2]=Hc.b}g.bindBuffer(g.ARRAY_BUFFER,
+Jb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Jc,kd)}}X.verticesNeedUpdate=false;X.colorsNeedUpdate=false}else if(Xa instanceof THREE.Line){Na=c(Xa,lc);Yb=Na.attributes&&n(Na);if(X.verticesNeedUpdate||X.colorsNeedUpdate||Yb){var vb=X,dd=g.DYNAMIC_DRAW,vc=void 0,wc=void 0,Kc=void 0,sa=void 0,Lc=void 0,nd=vb.vertices,od=vb.colors,wd=nd.length,xd=od.length,Mc=vb.__vertexArray,Nc=vb.__colorArray,yd=vb.colorsNeedUpdate,ed=vb.__webglCustomAttributesList,Oc=void 0,pd=void 0,Ga=void 0,fc=void 0,Oa=void 0,
+ka=void 0;if(vb.verticesNeedUpdate){for(vc=0;vc<wd;vc++){Kc=nd[vc];sa=vc*3;Mc[sa]=Kc.x;Mc[sa+1]=Kc.y;Mc[sa+2]=Kc.z}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Mc,dd)}if(yd){for(wc=0;wc<xd;wc++){Lc=od[wc];sa=wc*3;Nc[sa]=Lc.r;Nc[sa+1]=Lc.g;Nc[sa+2]=Lc.b}g.bindBuffer(g.ARRAY_BUFFER,vb.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Nc,dd)}if(ed){Oc=0;for(pd=ed.length;Oc<pd;Oc++){ka=ed[Oc];if(ka.needsUpdate&&(ka.boundTo===void 0||ka.boundTo==="vertices")){sa=0;fc=ka.value.length;
+if(ka.size===1)for(Ga=0;Ga<fc;Ga++)ka.array[Ga]=ka.value[Ga];else if(ka.size===2)for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.x;ka.array[sa+1]=Oa.y;sa=sa+2}else if(ka.size===3)if(ka.type==="c")for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.r;ka.array[sa+1]=Oa.g;ka.array[sa+2]=Oa.b;sa=sa+3}else for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.x;ka.array[sa+1]=Oa.y;ka.array[sa+2]=Oa.z;sa=sa+3}else if(ka.size===4)for(Ga=0;Ga<fc;Ga++){Oa=ka.value[Ga];ka.array[sa]=Oa.x;ka.array[sa+1]=
+Oa.y;ka.array[sa+2]=Oa.z;ka.array[sa+3]=Oa.w;sa=sa+4}g.bindBuffer(g.ARRAY_BUFFER,ka.buffer);g.bufferData(g.ARRAY_BUFFER,ka.array,dd)}}}}X.verticesNeedUpdate=false;X.colorsNeedUpdate=false;Na.attributes&&o(Na)}else if(Xa instanceof THREE.ParticleSystem){Na=c(Xa,lc);Yb=Na.attributes&&n(Na);(X.verticesNeedUpdate||X.colorsNeedUpdate||Xa.sortParticles||Yb)&&f(X,g.DYNAMIC_DRAW,Xa);X.verticesNeedUpdate=false;X.colorsNeedUpdate=false;Na.attributes&&o(Na)}}};this.initMaterial=function(a,b,c,d){var e,f,h,i,
+j,k,l,m;a instanceof THREE.MeshDepthMaterial?m="depth":a instanceof THREE.MeshNormalMaterial?m="normal":a instanceof THREE.MeshBasicMaterial?m="basic":a instanceof THREE.MeshLambertMaterial?m="lambert":a instanceof THREE.MeshPhongMaterial?m="phong":a instanceof THREE.LineBasicMaterial?m="basic":a instanceof THREE.ParticleBasicMaterial&&(m="particle_basic");if(m){var n=THREE.ShaderLib[m];a.uniforms=THREE.UniformsUtils.clone(n.uniforms);a.vertexShader=n.vertexShader;a.fragmentShader=n.fragmentShader}var o,
+q;o=h=e=n=0;for(f=b.length;o<f;o++){q=b[o];if(!q.onlyShadow){q instanceof THREE.DirectionalLight&&h++;q instanceof THREE.PointLight&&e++;q instanceof THREE.SpotLight&&n++}}if(e+n+h<=V){o=h;f=e}else{o=Math.ceil(V*h/(e+h));n=f=V-o}e=o;h=n;n=l=0;for(o=b.length;n<o;n++){q=b[n];if(q.castShadow){q instanceof THREE.SpotLight&&l++;q instanceof THREE.DirectionalLight&&!q.shadowCascade&&l++}}if(hc&&d&&d.useVertexTexture)k=1024;else{b=g.getParameter(g.MAX_VERTEX_UNIFORM_VECTORS);b=Math.floor((b-20)/4);if(d!==
+void 0&&d instanceof THREE.SkinnedMesh){b=Math.min(d.bones.length,b);b<d.bones.length&&console.warn("WebGLRenderer: too many bones - "+d.bones.length+", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")}k=b}var p;a:{q=a.fragmentShader;o=a.vertexShader;var n=a.uniforms,b=a.attributes,c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:k,useVertexTexture:hc&&d&&d.useVertexTexture,
+boneTextureWidth:d&&d.boneTextureWidth,boneTextureHeight:d&&d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:h,maxShadows:l,shadowMapEnabled:this.shadowMapEnabled&&d.receiveShadow,shadowMapSoft:this.shadowMapSoft,shadowMapDebug:this.shadowMapDebug,shadowMapCascade:this.shadowMapCascade,alphaTest:a.alphaTest,metal:a.metal,perPixel:a.perPixel,wrapAround:a.wrapAround,
+doubleSided:a.doubleSided},r,d=[];if(m)d.push(m);else{d.push(q);d.push(o)}for(r in c){d.push(r);d.push(c[r])}m=d.join();r=0;for(d=ea.length;r<d;r++){e=ea[r];if(e.code===m){e.usedTimes++;p=e.program;break a}}r=g.createProgram();d=["precision "+C+" float;",jc?"#define VERTEX_TEXTURES":"",F.gammaInput?"#define GAMMA_INPUT":"",F.gammaOutput?"#define GAMMA_OUTPUT":"",F.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,
+"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,"#define MAX_BONES "+c.maxBones,c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.boneTextureWidth?"#define N_BONE_PIXEL_X "+c.boneTextureWidth.toFixed(1):"",c.boneTextureHeight?"#define N_BONE_PIXEL_Y "+c.boneTextureHeight.toFixed(1):"",c.morphTargets?
+"#define USE_MORPHTARGETS":"",c.morphNormals?"#define USE_MORPHNORMALS":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"",c.sizeAttenuation?"#define USE_SIZEATTENUATION":"","uniform mat4 modelMatrix;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform mat4 viewMatrix;\nuniform mat3 normalMatrix;\nuniform vec3 cameraPosition;\nattribute vec3 position;\nattribute vec3 normal;\nattribute vec2 uv;\nattribute vec2 uv2;\n#ifdef USE_COLOR\nattribute vec3 color;\n#endif\n#ifdef USE_MORPHTARGETS\nattribute vec3 morphTarget0;\nattribute vec3 morphTarget1;\nattribute vec3 morphTarget2;\nattribute vec3 morphTarget3;\n#ifdef USE_MORPHNORMALS\nattribute vec3 morphNormal0;\nattribute vec3 morphNormal1;\nattribute vec3 morphNormal2;\nattribute vec3 morphNormal3;\n#else\nattribute vec3 morphTarget4;\nattribute vec3 morphTarget5;\nattribute vec3 morphTarget6;\nattribute vec3 morphTarget7;\n#endif\n#endif\n#ifdef USE_SKINNING\nattribute vec4 skinVertexA;\nattribute vec4 skinVertexB;\nattribute vec4 skinIndex;\nattribute vec4 skinWeight;\n#endif\n"].join("\n");
 e=["precision "+C+" float;","#define MAX_DIR_LIGHTS "+c.maxDirLights,"#define MAX_POINT_LIGHTS "+c.maxPointLights,"#define MAX_SPOT_LIGHTS "+c.maxSpotLights,"#define MAX_SHADOWS "+c.maxShadows,c.alphaTest?"#define ALPHATEST "+c.alphaTest:"",F.gammaInput?"#define GAMMA_INPUT":"",F.gammaOutput?"#define GAMMA_OUTPUT":"",F.physicallyBasedShading?"#define PHYSICALLY_BASED_SHADING":"",c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fog instanceof THREE.FogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":
 "",c.envMap?"#define USE_ENVMAP":"",c.lightMap?"#define USE_LIGHTMAP":"",c.vertexColors?"#define USE_COLOR":"",c.metal?"#define METAL":"",c.perPixel?"#define PHONG_PER_PIXEL":"",c.wrapAround?"#define WRAP_AROUND":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapSoft?"#define SHADOWMAP_SOFT":"",c.shadowMapDebug?"#define SHADOWMAP_DEBUG":"",c.shadowMapCascade?"#define SHADOWMAP_CASCADE":"","uniform mat4 viewMatrix;\nuniform vec3 cameraPosition;\n"].join("\n");
 e=w("fragment",e+q);d=w("vertex",d+o);g.attachShader(r,d);g.attachShader(r,e);g.linkProgram(r);g.getProgramParameter(r,g.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+g.getProgramParameter(r,g.VALIDATE_STATUS)+", gl error ["+g.getError()+"]");g.deleteShader(e);g.deleteShader(d);r.uniforms={};r.attributes={};var u,d=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","modelMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?d.push("boneTexture"):

+ 1 - 1
src/extras/renderers/plugins/DepthPassPlugin.js

@@ -114,7 +114,7 @@ THREE.DepthPassPlugin = function ( ) {
 				object = webglObject.object;
 				buffer = webglObject.buffer;
 
-				_renderer.setObjectFaces( object );
+				if ( object.material ) _renderer.setMaterialFaces( object.material );
 
 				if ( object.customDepthMaterial ) {
 

+ 0 - 2
src/extras/renderers/plugins/ShadowMapPlugin.js

@@ -259,8 +259,6 @@ THREE.ShadowMapPlugin = function ( ) {
 					// culling is overriden globally for all objects
 					// while rendering depth map
 
-					//_renderer.setObjectFaces( object );
-
 					if ( object.customDepthMaterial ) {
 
 						material = object.customDepthMaterial;