2
0
Эх сурвалжийг харах

Added support for standard derivates.

Need to find some good example for this ...
alteredq 13 жил өмнө
parent
commit
19c228dafb

+ 91 - 90
build/Three.js

@@ -241,7 +241,7 @@ THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){va
 THREE.Fog=function(a,b,c){this.color=new THREE.Color(a);this.near=b!==void 0?b:1;this.far=c!==void 0?c:1E3};THREE.FogExp2=function(a,b){this.color=new THREE.Color(a);this.density=b!==void 0?b:2.5E-4};
 THREE.CanvasRenderer=function(a){function b(a){if(u!==a)u=m.globalAlpha=a}function c(a){if(t!==a){if(a===THREE.NormalBlending)m.globalCompositeOperation="source-over";else if(a===THREE.AdditiveBlending)m.globalCompositeOperation="lighter";else if(a===THREE.SubtractiveBlending)m.globalCompositeOperation="darker";t=a}}function d(a){if(v!==a)v=m.strokeStyle=a}function e(a){if(x!==a)x=m.fillStyle=a}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,j,i=new THREE.Projector,l=a.canvas!==
 void 0?a.canvas:document.createElement("canvas"),o,n,p,r,m=l.getContext("2d"),q=new THREE.Color(0),s=0,u=1,t=0,v=null,x=null,F=null,C=null,z=null,w,H,E,O,Q=new THREE.RenderableVertex,Y=new THREE.RenderableVertex,B,J,P,D,W,R,N,ba,U,I,ca,ha,L=new THREE.Color,X=new THREE.Color,S=new THREE.Color,T=new THREE.Color,ia=new THREE.Color,ma=[],za=[],Ga,Oa,Pa,Ua,nb,gb,Ob,ob,kb,ec,Va=new THREE.Rectangle,Da=new THREE.Rectangle,Aa=new THREE.Rectangle,hb=false,pa=new THREE.Color,Fa=new THREE.Color,Ra=new THREE.Color,
-ra=new THREE.Vector3,k,bb,Gb,Wa,cb,pb,a=16;k=document.createElement("canvas");k.width=k.height=2;bb=k.getContext("2d");bb.fillStyle="rgba(0,0,0,1)";bb.fillRect(0,0,2,2);Gb=bb.getImageData(0,0,2,2);Wa=Gb.data;cb=document.createElement("canvas");cb.width=cb.height=a;pb=cb.getContext("2d");pb.translate(-a/2,-a/2);pb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=true;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){o=a;n=b;p=Math.floor(o/2);r=Math.floor(n/
+ra=new THREE.Vector3,k,Za,Gb,Wa,cb,pb,a=16;k=document.createElement("canvas");k.width=k.height=2;Za=k.getContext("2d");Za.fillStyle="rgba(0,0,0,1)";Za.fillRect(0,0,2,2);Gb=Za.getImageData(0,0,2,2);Wa=Gb.data;cb=document.createElement("canvas");cb.width=cb.height=a;pb=cb.getContext("2d");pb.translate(-a/2,-a/2);pb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=true;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){o=a;n=b;p=Math.floor(o/2);r=Math.floor(n/
 2);l.width=o;l.height=n;Va.set(-p,-r,p,r);Da.set(-p,-r,p,r);u=1;t=0;z=C=F=x=v=null};this.setClearColor=function(a,b){q.copy(a);s=b!==void 0?b:1;Da.set(-p,-r,p,r)};this.setClearColorHex=function(a,b){q.setHex(a);s=b!==void 0?b:1;Da.set(-p,-r,p,r)};this.clear=function(){m.setTransform(1,0,0,-1,p,r);if(Da.isEmpty()===false){Da.minSelf(Va);Da.inflate(2);s<1&&m.clearRect(Math.floor(Da.getX()),Math.floor(Da.getY()),Math.floor(Da.getWidth()),Math.floor(Da.getHeight()));if(s>0){c(THREE.NormalBlending);b(1);
 e("rgba("+Math.floor(q.r*255)+","+Math.floor(q.g*255)+","+Math.floor(q.b*255)+","+s+")");m.fillRect(Math.floor(Da.getX()),Math.floor(Da.getY()),Math.floor(Da.getWidth()),Math.floor(Da.getHeight()))}Da.empty()}};this.render=function(a,l){function o(a){var b,c,d,e;pa.setRGB(0,0,0);Fa.setRGB(0,0,0);Ra.setRGB(0,0,0);b=0;for(c=a.length;b<c;b++){d=a[b];e=d.color;if(d instanceof THREE.AmbientLight){pa.r=pa.r+e.r;pa.g=pa.g+e.g;pa.b=pa.b+e.b}else if(d instanceof THREE.DirectionalLight){Fa.r=Fa.r+e.r;Fa.g=
 Fa.g+e.g;Fa.b=Fa.b+e.b}else if(d instanceof THREE.PointLight){Ra.r=Ra.r+e.r;Ra.g=Ra.g+e.g;Ra.b=Ra.b+e.b}}}function n(a,b,c,d){var e,f,g,h,k,j;e=0;for(f=a.length;e<f;e++){g=a[e];h=g.color;if(g instanceof THREE.DirectionalLight){k=g.matrixWorld.getPosition();j=c.dot(k);if(!(j<=0)){j=j*g.intensity;d.r=d.r+h.r*j;d.g=d.g+h.g*j;d.b=d.b+h.b*j}}else if(g instanceof THREE.PointLight){k=g.matrixWorld.getPosition();j=c.dot(ra.sub(k,b).normalize());if(!(j<=0)){j=j*(g.distance==0?1:1-Math.min(b.distanceTo(k)/
@@ -262,7 +262,7 @@ Ga,Oa);ia.r=ia.g=ia.b=1-gc(e.positionScreen.z,Ga,Oa);Pa=Ic(X,S,T,ia);u(B,J,P,D,N
 Aa.inflate(b*2)}function Hb(a){e(a.getContextStyle());m.fill()}function kd(a,b,c,d,f,g,h,k,i,j,l,n,o){if(!(o.image===void 0||o.image.width===0)){if(o.needsUpdate===true||ma[o.id]===void 0){var p=o.wrapS==THREE.RepeatWrapping,fc=o.wrapT==THREE.RepeatWrapping;ma[o.id]=m.createPattern(o.image,p===true&&fc===true?"repeat":p===true&&fc===false?"repeat-x":p===false&&fc===true?"repeat-y":"no-repeat");o.needsUpdate=false}e(ma[o.id]);var p=o.offset.x/o.repeat.x,fc=o.offset.y/o.repeat.y,r=o.image.width*o.repeat.x,
 q=o.image.height*o.repeat.y,h=(h+p)*r,k=(k+fc)*q,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+p)*r-h,j=(j+fc)*q-k,l=(l+p)*r-h,n=(n+fc)*q-k,p=i*n-l*j;if(p===0){if(za[o.id]===void 0){b=document.createElement("canvas");b.width=o.image.width;b.height=o.image.height;b=b.getContext("2d");b.drawImage(o.image,0,0);za[o.id]=b.getImageData(0,0,o.image.width,o.image.height).data}b=za[o.id];h=(Math.floor(h)+Math.floor(k)*o.image.width)*4;L.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255);Hb(L)}else{p=1/p;o=(n*c-j*f)*p;j=(n*d-j*g)*p;c=
 (i*f-l*c)*p;d=(i*g-l*d)*p;a=a-o*h-c*k;h=b-j*h-d*k;m.save();m.transform(o,j,c,d,a,h);m.fill();m.restore()}}}function mc(a,b,c,d,e,f,g,h,k,j,i,l,o){var n,p;n=o.width-1;p=o.height-1;g=g*n;h=h*p;c=c-a;d=d-b;e=e-a;f=f-b;k=k*n-g;j=j*p-h;i=i*n-g;l=l*p-h;p=1/(k*l-i*j);n=(l*c-j*e)*p;j=(l*d-j*f)*p;c=(k*e-i*c)*p;d=(k*f-i*d)*p;a=a-n*g-c*h;b=b-j*g-d*h;m.save();m.transform(n,j,c,d,a,b);m.clip();m.drawImage(o,0,0);m.restore()}function Ic(a,b,c,d){var e=~~(a.r*255),f=~~(a.g*255),a=~~(a.b*255),g=~~(b.r*255),h=~~(b.g*
-255),b=~~(b.b*255),j=~~(c.r*255),i=~~(c.g*255),c=~~(c.b*255),l=~~(d.r*255),m=~~(d.g*255),d=~~(d.b*255);Wa[0]=e<0?0:e>255?255:e;Wa[1]=f<0?0:f>255?255:f;Wa[2]=a<0?0:a>255?255:a;Wa[4]=g<0?0:g>255?255:g;Wa[5]=h<0?0:h>255?255:h;Wa[6]=b<0?0:b>255?255:b;Wa[8]=j<0?0:j>255?255:j;Wa[9]=i<0?0:i>255?255:i;Wa[10]=c<0?0:c>255?255:c;Wa[12]=l<0?0:l>255?255:l;Wa[13]=m<0?0:m>255?255:m;Wa[14]=d<0?0:d>255?255:d;bb.putImageData(Gb,0,0);pb.drawImage(k,0,0);return cb}function gc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}
+255),b=~~(b.b*255),j=~~(c.r*255),i=~~(c.g*255),c=~~(c.b*255),l=~~(d.r*255),m=~~(d.g*255),d=~~(d.b*255);Wa[0]=e<0?0:e>255?255:e;Wa[1]=f<0?0:f>255?255:f;Wa[2]=a<0?0:a>255?255:a;Wa[4]=g<0?0:g>255?255:g;Wa[5]=h<0?0:h>255?255:h;Wa[6]=b<0?0:b>255?255:b;Wa[8]=j<0?0:j>255?255:j;Wa[9]=i<0?0:i>255?255:i;Wa[10]=c<0?0:c>255?255:c;Wa[12]=l<0?0:l>255?255:l;Wa[13]=m<0?0:m>255?255:m;Wa[14]=d<0?0:d>255?255:d;Za.putImageData(Gb,0,0);pb.drawImage(k,0,0);return cb}function gc(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}
 function nc(a){a=(a+1)*0.5;return a<0?0:a>1?1:a}function Qb(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;if(e!==0){e=1/Math.sqrt(e);c=c*e;d=d*e;b.x=b.x+c;b.y=b.y+d;a.x=a.x-c;a.y=a.y-d}}var Jc,ld,Ma,ib;this.autoClear===true?this.clear():m.setTransform(1,0,0,-1,p,r);f.info.render.vertices=0;f.info.render.faces=0;g=i.projectScene(a,l,this.sortElements);h=g.elements;j=g.lights;hb=j.length>0;hb===true&&o(j);Jc=0;for(ld=h.length;Jc<ld;Jc++){Ma=h[Jc];ib=Ma.material;ib=ib instanceof THREE.MeshFaceMaterial?Ma.faceMaterial:
 ib;if(!(ib===void 0||ib.visible===false)){Aa.empty();if(Ma instanceof THREE.RenderableParticle){w=Ma;w.x=w.x*p;w.y=w.y*r;q(w,Ma,ib,a)}else if(Ma instanceof THREE.RenderableLine){w=Ma.v1;H=Ma.v2;w.positionScreen.x=w.positionScreen.x*p;w.positionScreen.y=w.positionScreen.y*r;H.positionScreen.x=H.positionScreen.x*p;H.positionScreen.y=H.positionScreen.y*r;Aa.addPoint(w.positionScreen.x,w.positionScreen.y);Aa.addPoint(H.positionScreen.x,H.positionScreen.y);Va.intersects(Aa)===true&&s(w,H,Ma,ib,a)}else if(Ma instanceof
 THREE.RenderableFace3){w=Ma.v1;H=Ma.v2;E=Ma.v3;w.positionScreen.x=w.positionScreen.x*p;w.positionScreen.y=w.positionScreen.y*r;H.positionScreen.x=H.positionScreen.x*p;H.positionScreen.y=H.positionScreen.y*r;E.positionScreen.x=E.positionScreen.x*p;E.positionScreen.y=E.positionScreen.y*r;if(ib.overdraw===true){Qb(w.positionScreen,H.positionScreen);Qb(H.positionScreen,E.positionScreen);Qb(E.positionScreen,w.positionScreen)}Aa.add3Points(w.positionScreen.x,w.positionScreen.y,H.positionScreen.x,H.positionScreen.y,
@@ -335,100 +335,101 @@ i)}else if(m==="tv"){if(e._array===void 0){e._array=[];m=0;for(o=e.texture.lengt
 d.skinning)&&h.viewMatrix!==null&&k.uniformMatrix4fv(h.viewMatrix,false,a._viewMatrixArray)}if(d.skinning)if(dc&&f.useVertexTexture){if(h.boneTexture!==null){k.uniform1i(h.boneTexture,12);D.setTexture(f.boneTexture,12)}}else h.boneGlobalMatrices!==null&&k.uniformMatrix4fv(h.boneGlobalMatrices,false,f.boneMatrices);k.uniformMatrix4fv(h.modelViewMatrix,false,f._modelViewMatrix.elements);h.normalMatrix&&k.uniformMatrix3fv(h.normalMatrix,false,f._normalMatrix.elements);h.objectMatrix!==null&&k.uniformMatrix4fv(h.objectMatrix,
 false,f.matrixWorld.elements);return g}function s(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function u(a,b,c){if(Oa!==a){a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL);Oa=a}if(a&&(Pa!==b||Ua!==c)){k.polygonOffset(b,c);Pa=b;Ua=c}}function t(a,b){var c;a==="fragment"?c=k.createShader(k.FRAGMENT_SHADER):a==="vertex"&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,b);k.compileShader(c);
 if(!k.getShaderParameter(c,k.COMPILE_STATUS)){console.error(k.getShaderInfoLog(c));console.error(b);return null}return c}function v(a,b,c){if(c){k.texParameteri(a,k.TEXTURE_WRAP_S,C(b.wrapS));k.texParameteri(a,k.TEXTURE_WRAP_T,C(b.wrapT));k.texParameteri(a,k.TEXTURE_MAG_FILTER,C(b.magFilter));k.texParameteri(a,k.TEXTURE_MIN_FILTER,C(b.minFilter))}else{k.texParameteri(a,k.TEXTURE_WRAP_S,k.CLAMP_TO_EDGE);k.texParameteri(a,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE);k.texParameteri(a,k.TEXTURE_MAG_FILTER,F(b.magFilter));
-k.texParameteri(a,k.TEXTURE_MIN_FILTER,F(b.minFilter))}bb&&k.texParameterf(a,bb.TEXTURE_MAX_ANISOTROPY_EXT,b.anisotropy)}function x(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,
+k.texParameteri(a,k.TEXTURE_MIN_FILTER,F(b.minFilter))}Za&&k.texParameterf(a,Za.TEXTURE_MAX_ANISOTROPY_EXT,b.anisotropy)}function x(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_STENCIL,b.width,b.height);k.framebufferRenderbuffer(k.FRAMEBUFFER,
 k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a)}else k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function F(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function C(a){return a===THREE.RepeatWrapping?k.REPEAT:a===THREE.ClampToEdgeWrapping?k.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?k.MIRRORED_REPEAT:a===THREE.NearestFilter?k.NEAREST:a===THREE.NearestMipMapNearestFilter?k.NEAREST_MIPMAP_NEAREST:a===
 THREE.NearestMipMapLinearFilter?k.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?k.LINEAR:a===THREE.LinearMipMapNearestFilter?k.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?k.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?k.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?k.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?k.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?k.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?k.BYTE:a===THREE.ShortType?k.SHORT:a===THREE.UnsignedShortType?k.UNSIGNED_SHORT:
 a===THREE.IntType?k.INT:a===THREE.UnsignedIntType?k.UNSIGNED_INT:a===THREE.FloatType?k.FLOAT:a===THREE.AlphaFormat?k.ALPHA:a===THREE.RGBFormat?k.RGB:a===THREE.RGBAFormat?k.RGBA:a===THREE.LuminanceFormat?k.LUMINANCE:a===THREE.LuminanceAlphaFormat?k.LUMINANCE_ALPHA:a===THREE.AddEquation?k.FUNC_ADD:a===THREE.SubtractEquation?k.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?k.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?k.ZERO:a===THREE.OneFactor?k.ONE:a===THREE.SrcColorFactor?k.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?
 k.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?k.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?k.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?k.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?k.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?k.DST_COLOR:a===THREE.OneMinusDstColorFactor?k.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?k.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},z=a.canvas!==void 0?a.canvas:document.createElement("canvas"),w=a.precision!==void 0?
 a.precision:"highp",H=a.alpha!==void 0?a.alpha:true,E=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,O=a.antialias!==void 0?a.antialias:false,Q=a.stencil!==void 0?a.stencil:true,Y=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,B=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),J=a.clearAlpha!==void 0?a.clearAlpha:0,P=a.maxLights!==void 0?a.maxLights:4;this.domElement=z;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
 this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};
-var D=this,W=[],R=0,N=null,ba=null,U=-1,I=null,ca=null,ha=0,L=-1,X=-1,S=-1,T=-1,ia=-1,ma=-1,za=-1,Ga=-1,Oa=null,Pa=null,Ua=null,nb=null,gb=0,Ob=0,ob=0,kb=0,ec=0,Va=0,Da=new THREE.Frustum,Aa=new THREE.Matrix4,hb=new THREE.Matrix4,pa=new THREE.Vector4,Fa=new THREE.Vector3,Ra=true,ra={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},k,bb;try{if(!(k=
-z.getContext("experimental-webgl",{alpha:H,premultipliedAlpha:E,antialias:O,stencil:Q,preserveDrawingBuffer:Y})))throw"Error creating WebGL context.";}catch(Gb){console.error(Gb)}(a=k.getExtension("OES_texture_float"))||console.log("THREE.WebGLRenderer: Float textures not supported.");(bb=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic"))||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");
-k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(B.r,B.g,B.b,J);this.context=k;H=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Wa=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),cb=bb?k.getParameter(bb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,pb=H>0,dc=
-pb&&a;this.getContext=function(){return k};this.supportsVertexTextures=function(){return pb};this.getMaxAnisotropy=function(){return cb};this.setSize=function(a,b){z.width=a;z.height=b;this.setViewport(0,0,z.width,z.height)};this.setViewport=function(a,b,c,d){gb=a;Ob=b;ob=c;kb=d;k.viewport(gb,Ob,ob,kb)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};this.setClearColorHex=function(a,b){B.setHex(a);J=b;k.clearColor(B.r,
-B.g,B.b,J)};this.setClearColor=function(a,b){B.copy(a);J=b;k.clearColor(B.r,B.g,B.b,J)};this.getClearColor=function(){return B};this.getClearAlpha=function(){return J};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|k.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|k.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=
-function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];k.deleteBuffer(c.__webglVertexBuffer);k.deleteBuffer(c.__webglNormalBuffer);k.deleteBuffer(c.__webglTangentBuffer);k.deleteBuffer(c.__webglColorBuffer);
-k.deleteBuffer(c.__webglUVBuffer);k.deleteBuffer(c.__webglUV2Buffer);k.deleteBuffer(c.__webglSkinVertexABuffer);k.deleteBuffer(c.__webglSkinVertexBBuffer);k.deleteBuffer(c.__webglSkinIndicesBuffer);k.deleteBuffer(c.__webglSkinWeightsBuffer);k.deleteBuffer(c.__webglFaceBuffer);k.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d<e;d++)k.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=0;for(e=c.numMorphNormals;d<e;d++)k.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=
-void 0;for(d in c.__webglCustomAttributesList)k.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}D.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);D.info.memory.geometries--}else if(a instanceof THREE.Line){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);D.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);
-k.deleteBuffer(a.__webglColorBuffer);D.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;k.deleteTexture(a.__webglTexture);D.info.memory.textures--}};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){k.deleteTexture(a.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){k.deleteFramebuffer(a.__webglFramebuffer[b]);k.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{k.deleteFramebuffer(a.__webglFramebuffer);
-k.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=W.length;a<c;a++){d=W[a];if(d.program===b){d.usedTimes--;d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=W.length;a<c;a++){d=W[a];d.program!==b&&e.push(d)}W=e;k.deleteProgram(b);D.info.memory.programs--}}};this.updateShadowMap=function(a,b){N=null;U=I=Ga=za=S=-1;Ra=true;X=L=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,
-b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=k.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=k.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=k.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=k.createBuffer();if(a.hasPositions){k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,a.positionArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.position);k.vertexAttribPointer(b.attributes.position,
-3,k.FLOAT,false,0,0)}if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,j,i,l,m,n,o,p=a.count*3;for(o=0;o<p;o=o+9){n=a.normalArray;d=n[o];e=n[o+1];f=n[o+2];g=n[o+3];j=n[o+4];l=n[o+5];h=n[o+6];i=n[o+7];m=n[o+8];d=(d+g+h)/3;e=(e+j+i)/3;f=(f+l+m)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+7]=e;n[o+8]=f}}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,
-3,k.FLOAT,false,0,0)}if(a.hasUvs&&c.map){k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer);k.bufferData(k.ARRAY_BUFFER,a.uvArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.uv);k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.color);k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,false,
-0,0)}k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=q(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==I){I=d;b=true}if(f instanceof THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var g=f[d].index;if(b){var h=e.attributes.position,j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.position,j,k.FLOAT,false,0,g*j*4);h=e.attributes.normal;if(a.normal>=
-0&&h){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.normal,j,k.FLOAT,false,0,g*j*4)}h=e.attributes.uv;if(a.uv>=0&&h)if(h.buffer){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.uv,j,k.FLOAT,false,0,g*j*4);k.enableVertexAttribArray(a.uv)}else k.disableVertexAttribArray(a.uv);h=e.attributes.color;if(a.color>=0&&h){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.color,j,k.FLOAT,false,0,g*j*4)}h=e.attributes.tangent;if(a.tangent>=
-0&&h){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.tangent,j,k.FLOAT,false,0,g*j*4)}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}k.drawElements(k.TRIANGLES,f[d].count,k.UNSIGNED_SHORT,f[d].start*2);D.info.render.calls++;D.info.render.vertices=D.info.render.vertices+f[d].count;D.info.render.faces=D.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,j,c=q(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+
-c.id*2+(d.wireframe?1:0);if(c!==I){I=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(c.position,
-3,k.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var i=0;j=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;i<d.numSupportedMorphTargets&&i<j.length;){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[j[i]]);k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[j[i]]);k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[i]=g[j[i]];i++}}else{j=[];g=f.morphTargetInfluences;
-var l,m=g.length;for(l=0;l<m;l++){i=g[l];i>0&&j.push([l,i])}if(j.length>d.numSupportedMorphTargets){j.sort(h);j.length=d.numSupportedMorphTargets}else j.length>d.numSupportedMorphNormals?j.sort(h):j.length===0&&j.push([0,0]);for(i=0;i<d.numSupportedMorphTargets;){if(j[i]){l=j[i][0];k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[l]);k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[l]);k.vertexAttribPointer(c["morphNormal"+
-i],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[i]=g[l]}else{k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,false,0,0);d.morphNormals&&k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,false,0,0);f.__webglMorphTargetInfluences[i]=0}i++}}d.program.uniforms.morphTargetInfluences!==null&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=0;for(j=e.__webglCustomAttributesList.length;g<j;g++){c=e.__webglCustomAttributesList[g];
-if(b[c.buffer.belongsToAttribute]>=0){k.bindBuffer(k.ARRAY_BUFFER,c.buffer);k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,false,0,0)}}}if(b.color>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,
-false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer);k.vertexAttribPointer(b.uv,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv)}else k.disableVertexAttribArray(b.uv);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)}D.info.render.calls++;D.info.render.vertices=D.info.render.vertices+e.__webglFaceCount;D.info.render.faces=D.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);D.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);D.info.render.calls++;D.info.render.points=D.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);D.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,h,m,o=a.__lights,n=a.fog;U=-1;Ra=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);Aa.multiply(b.projectionMatrix,b.matrixWorldInverse);Da.setFromMatrix(Aa);this.autoUpdateObjects&&this.initWebGLObjects(a);j(this.renderPluginsPre,
-a,b);D.info.render.calls=0;D.info.render.vertices=0;D.info.render.faces=0;D.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||Da.contains(h))){s(h,b);var p=f,r=p.object,q=p.buffer,t=void 0,t=t=void 0,t=r.material;if(t instanceof THREE.MeshFaceMaterial){t=
-q.materialIndex;if(t>=0){t=r.geometry.materials[t];if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=null}}}else if(t)if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{pa.copy(h.matrixWorld.getPosition());Aa.multiplyVector3(pa);f.z=pa.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);u(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);i(a.__webglObjects,false,"",b,o,n,true,d);l(a.__webglObjectsImmediate,"",b,o,n,false,d)}else{this.setBlending(THREE.NormalBlending);i(a.__webglObjects,true,"opaque",b,o,n,false);l(a.__webglObjectsImmediate,
-"opaque",b,o,n,false);i(a.__webglObjects,false,"transparent",b,o,n,true);l(a.__webglObjectsImmediate,"transparent",b,o,n,true)}j(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;D.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,k,Da):e.render(function(a){D.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,j=void 0,
-i=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){i=g.geometry;if(i instanceof THREE.Geometry){if(i.geometryGroups===void 0){var q=i,s=void 0,t=void 0,w=void 0,v=void 0,u=void 0,x=void 0,z=void 0,F={},C=q.morphTargets.length,B=q.morphNormals.length;q.geometryGroups={};s=0;for(t=q.faces.length;s<t;s++){w=q.faces[s];v=w.materialIndex;x=v!==void 0?v:-1;F[x]===void 0&&(F[x]={hash:x,counter:0});z=F[x].hash+
-"_"+F[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:C,numMorphNormals:B});u=w instanceof THREE.Face3?3:4;if(q.geometryGroups[z].vertices+u>65535){F[x].counter=F[x].counter+1;z=F[x].hash+"_"+F[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:C,numMorphNormals:B})}w instanceof THREE.Face3?q.geometryGroups[z].faces3.push(s):q.geometryGroups[z].faces4.push(s);
-q.geometryGroups[z].vertices=q.geometryGroups[z].vertices+u}q.geometryGroupsList=[];var H=void 0;for(H in q.geometryGroups){q.geometryGroups[H].id=ha++;q.geometryGroupsList.push(q.geometryGroups[H])}}for(j in i.geometryGroups){l=i.geometryGroups[j];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 X=void 0,L=void 0;if(I.numMorphTargets){I.__webglMorphTargetsBuffers=[];X=0;for(L=I.numMorphTargets;X<L;X++)I.__webglMorphTargetsBuffers.push(k.createBuffer())}if(I.numMorphNormals){I.__webglMorphNormalsBuffers=[];X=0;for(L=I.numMorphNormals;X<L;X++)I.__webglMorphNormalsBuffers.push(k.createBuffer())}D.info.memory.geometries++;
-var E=l,J=g,T=J.geometry,O=E.faces3,N=E.faces4,S=O.length*3+N.length*4,U=O.length*1+N.length*2,P=O.length*3+N.length*4,Q=c(J,E),ba=e(Q),R=d(Q),Y=Q.vertexColors?Q.vertexColors:false;E.__vertexArray=new Float32Array(S*3);if(R)E.__normalArray=new Float32Array(S*3);if(T.hasTangents)E.__tangentArray=new Float32Array(S*4);if(Y)E.__colorArray=new Float32Array(S*3);if(ba){if(T.faceUvs.length>0||T.faceVertexUvs.length>0)E.__uvArray=new Float32Array(S*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>1)E.__uv2Array=
-new Float32Array(S*2)}if(J.geometry.skinWeights.length&&J.geometry.skinIndices.length){E.__skinVertexAArray=new Float32Array(S*4);E.__skinVertexBArray=new Float32Array(S*4);E.__skinIndexArray=new Float32Array(S*4);E.__skinWeightArray=new Float32Array(S*4)}E.__faceArray=new Uint16Array(U*3);E.__lineArray=new Uint16Array(P*2);var W=void 0,ca=void 0;if(E.numMorphTargets){E.__morphTargetsArrays=[];W=0;for(ca=E.numMorphTargets;W<ca;W++)E.__morphTargetsArrays.push(new Float32Array(S*3))}if(E.numMorphNormals){E.__morphNormalsArrays=
-[];W=0;for(ca=E.numMorphNormals;W<ca;W++)E.__morphNormalsArrays.push(new Float32Array(S*3))}E.__webglFaceCount=U*3;E.__webglLineCount=P*2;if(Q.attributes){if(E.__webglCustomAttributesList===void 0)E.__webglCustomAttributesList=[];var ia=void 0;for(ia in Q.attributes){var Ga=Q.attributes[ia],ma={},za;for(za in Ga)ma[za]=Ga[za];if(!ma.__webglInitialized||ma.createUniqueBuffers){ma.__webglInitialized=true;var Ua=1;ma.type==="v2"?Ua=2:ma.type==="v3"?Ua=3:ma.type==="v4"?Ua=4:ma.type==="c"&&(Ua=3);ma.size=
-Ua;ma.array=new Float32Array(S*Ua);ma.buffer=k.createBuffer();ma.buffer.belongsToAttribute=ia;Ga.needsUpdate=true;ma.__original=Ga}E.__webglCustomAttributesList.push(ma)}}E.__inittedArrays=true;i.verticesNeedUpdate=true;i.morphTargetsNeedUpdate=true;i.elementsNeedUpdate=true;i.uvsNeedUpdate=true;i.normalsNeedUpdate=true;i.tangentsNeedUpdate=true;i.colorsNeedUpdate=true}}}else if(i instanceof THREE.BufferGeometry){var Oa=i,Pa=void 0,pa=void 0,ra=void 0;for(Pa in Oa.attributes){ra=Pa==="index"?k.ELEMENT_ARRAY_BUFFER:
-k.ARRAY_BUFFER;pa=Oa.attributes[Pa];pa.buffer=k.createBuffer();k.bindBuffer(ra,pa.buffer);k.bufferData(ra,pa.array,k.STATIC_DRAW)}}}else if(g instanceof THREE.Ribbon){i=g.geometry;if(!i.__webglVertexBuffer){var Aa=i;Aa.__webglVertexBuffer=k.createBuffer();Aa.__webglColorBuffer=k.createBuffer();D.info.memory.geometries++;var Da=i,Fa=Da.vertices.length;Da.__vertexArray=new Float32Array(Fa*3);Da.__colorArray=new Float32Array(Fa*3);Da.__webglVertexCount=Fa;i.verticesNeedUpdate=true;i.colorsNeedUpdate=
-true}}else if(g instanceof THREE.Line){i=g.geometry;if(!i.__webglVertexBuffer){var nb=i;nb.__webglVertexBuffer=k.createBuffer();nb.__webglColorBuffer=k.createBuffer();D.info.memory.geometries++;var gb=i,Wa=g,Ra=gb.vertices.length;gb.__vertexArray=new Float32Array(Ra*3);gb.__colorArray=new Float32Array(Ra*3);gb.__webglLineCount=Ra;b(gb,Wa);i.verticesNeedUpdate=true;i.colorsNeedUpdate=true}}else if(g instanceof THREE.ParticleSystem){i=g.geometry;if(!i.__webglVertexBuffer){var bb=i;bb.__webglVertexBuffer=
-k.createBuffer();bb.__webglColorBuffer=k.createBuffer();D.info.geometries++;var Va=i,Ob=g,ob=Va.vertices.length;Va.__vertexArray=new Float32Array(ob*3);Va.__colorArray=new Float32Array(ob*3);Va.__sortArray=[];Va.__webglParticleCount=ob;b(Va,Ob);i.verticesNeedUpdate=true;i.colorsNeedUpdate=true}}}if(!g.__webglActive){if(g instanceof THREE.Mesh){i=g.geometry;if(i instanceof THREE.BufferGeometry)o(h.__webglObjects,i,g);else for(j in i.geometryGroups){l=i.geometryGroups[j];o(h.__webglObjects,l,g)}}else if(g instanceof
-THREE.Ribbon||g instanceof THREE.Line||g instanceof THREE.ParticleSystem){i=g.geometry;o(h.__webglObjects,i,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?m(kb.__webglSprites,db):db instanceof THREE.LensFlare?m(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,da=lb.geometry,cb=void 0,oc=void 0,Xa=
-void 0;if(lb instanceof THREE.Mesh)if(da instanceof THREE.BufferGeometry){if(da.verticesNeedUpdate||da.elementsNeedUpdate||da.uvsNeedUpdate||da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate){var Ib=da,pc=k.DYNAMIC_DRAW,ec=!da.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}}da.verticesNeedUpdate=false;da.elementsNeedUpdate=false;da.uvsNeedUpdate=false;da.normalsNeedUpdate=false;da.colorsNeedUpdate=false;da.tangentsNeedUpdate=false}else{for(var bd=0,yd=da.geometryGroupsList.length;bd<yd;bd++){cb=da.geometryGroupsList[bd];Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);if(da.verticesNeedUpdate||da.morphTargetsNeedUpdate||da.elementsNeedUpdate||da.uvsNeedUpdate||
-da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate||oc){var fa=cb,zd=lb,Za=k.DYNAMIC_DRAW,Ad=!da.dynamic,hc=Xa;if(fa.__inittedArrays){var nd=d(hc),cd=hc.vertexColors?hc.vertexColors:false,od=e(hc),Kc=nd===THREE.SmoothShading,G=void 0,V=void 0,jb=void 0,M=void 0,rc=void 0,Rb=void 0,mb=void 0,Lc=void 0,Jb=void 0,sc=void 0,tc=void 0,Z=void 0,$=void 0,aa=void 0,na=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,ja=void 0,pd=void 0,Yb=void 0,uc=void 0,vc=void 0,Ja=void 0,qd=void 0,Ha=void 0,Ia=void 0,Zb=void 0,Kb=void 0,ya=0,Ea=0,Lb=0,Mb=0,eb=0,Qa=0,oa=0,Sa=0,Ba=0,K=0,ea=0,A=0,$a=void 0,Ka=fa.__vertexArray,Cc=fa.__uvArray,Dc=fa.__uv2Array,fb=fa.__normalArray,sa=fa.__tangentArray,La=fa.__colorArray,ta=fa.__skinVertexAArray,ua=fa.__skinVertexBArray,
-va=fa.__skinIndexArray,wa=fa.__skinWeightArray,dd=fa.__morphTargetsArrays,ed=fa.__morphNormalsArrays,fd=fa.__webglCustomAttributesList,y=void 0,Fb=fa.__faceArray,ab=fa.__lineArray,Ta=zd.geometry,Bd=Ta.elementsNeedUpdate,rd=Ta.uvsNeedUpdate,Cd=Ta.normalsNeedUpdate,Dd=Ta.tangentsNeedUpdate,Ed=Ta.colorsNeedUpdate,Fd=Ta.morphTargetsNeedUpdate,ic=Ta.vertices,ka=fa.faces3,la=fa.faces4,Ca=Ta.faces,gd=Ta.faceVertexUvs[0],hd=Ta.faceVertexUvs[1],jc=Ta.skinVerticesA,kc=Ta.skinVerticesB,lc=Ta.skinIndices,$b=
-Ta.skinWeights,ac=Ta.morphTargets,Oc=Ta.morphNormals;if(Ta.verticesNeedUpdate){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=ic[M.a];$=ic[M.b];aa=ic[M.c];Ka[Ea]=Z.x;Ka[Ea+1]=Z.y;Ka[Ea+2]=Z.z;Ka[Ea+3]=$.x;Ka[Ea+4]=$.y;Ka[Ea+5]=$.z;Ka[Ea+6]=aa.x;Ka[Ea+7]=aa.y;Ka[Ea+8]=aa.z;Ea=Ea+9}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Z=ic[M.a];$=ic[M.b];aa=ic[M.c];na=ic[M.d];Ka[Ea]=Z.x;Ka[Ea+1]=Z.y;Ka[Ea+2]=Z.z;Ka[Ea+3]=$.x;Ka[Ea+4]=$.y;Ka[Ea+5]=$.z;Ka[Ea+6]=aa.x;Ka[Ea+7]=aa.y;Ka[Ea+8]=aa.z;Ka[Ea+9]=na.x;Ka[Ea+10]=
-na.y;Ka[Ea+11]=na.z;Ea=Ea+12}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ka,Za)}if(Fd){Ja=0;for(qd=ac.length;Ja<qd;Ja++){G=ea=0;for(V=ka.length;G<V;G++){Zb=ka[G];M=Ca[Zb];Z=ac[Ja].vertices[M.a];$=ac[Ja].vertices[M.b];aa=ac[Ja].vertices[M.c];Ha=dd[Ja];Ha[ea]=Z.x;Ha[ea+1]=Z.y;Ha[ea+2]=Z.z;Ha[ea+3]=$.x;Ha[ea+4]=$.y;Ha[ea+5]=$.z;Ha[ea+6]=aa.x;Ha[ea+7]=aa.y;Ha[ea+8]=aa.z;if(hc.morphNormals){if(Kc){Kb=Oc[Ja].vertexNormals[Zb];tb=Kb.a;ub=Kb.b;vb=Kb.c}else vb=ub=tb=Oc[Ja].faceNormals[Zb];
-Ia=ed[Ja];Ia[ea]=tb.x;Ia[ea+1]=tb.y;Ia[ea+2]=tb.z;Ia[ea+3]=ub.x;Ia[ea+4]=ub.y;Ia[ea+5]=ub.z;Ia[ea+6]=vb.x;Ia[ea+7]=vb.y;Ia[ea+8]=vb.z}ea=ea+9}G=0;for(V=la.length;G<V;G++){Zb=la[G];M=Ca[Zb];Z=ac[Ja].vertices[M.a];$=ac[Ja].vertices[M.b];aa=ac[Ja].vertices[M.c];na=ac[Ja].vertices[M.d];Ha=dd[Ja];Ha[ea]=Z.x;Ha[ea+1]=Z.y;Ha[ea+2]=Z.z;Ha[ea+3]=$.x;Ha[ea+4]=$.y;Ha[ea+5]=$.z;Ha[ea+6]=aa.x;Ha[ea+7]=aa.y;Ha[ea+8]=aa.z;Ha[ea+9]=na.x;Ha[ea+10]=na.y;Ha[ea+11]=na.z;if(hc.morphNormals){if(Kc){Kb=Oc[Ja].vertexNormals[Zb];
-tb=Kb.a;ub=Kb.b;vb=Kb.c;yc=Kb.d}else yc=vb=ub=tb=Oc[Ja].faceNormals[Zb];Ia=ed[Ja];Ia[ea]=tb.x;Ia[ea+1]=tb.y;Ia[ea+2]=tb.z;Ia[ea+3]=ub.x;Ia[ea+4]=ub.y;Ia[ea+5]=ub.z;Ia[ea+6]=vb.x;Ia[ea+7]=vb.y;Ia[ea+8]=vb.z;Ia[ea+9]=yc.x;Ia[ea+10]=yc.y;Ia[ea+11]=yc.z}ea=ea+12}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglMorphTargetsBuffers[Ja]);k.bufferData(k.ARRAY_BUFFER,dd[Ja],Za);if(hc.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglMorphNormalsBuffers[Ja]);k.bufferData(k.ARRAY_BUFFER,ed[Ja],Za)}}}if($b.length){G=
-0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];zb=$b[M.a];Ab=$b[M.b];Bb=$b[M.c];wa[K]=zb.x;wa[K+1]=zb.y;wa[K+2]=zb.z;wa[K+3]=zb.w;wa[K+4]=Ab.x;wa[K+5]=Ab.y;wa[K+6]=Ab.z;wa[K+7]=Ab.w;wa[K+8]=Bb.x;wa[K+9]=Bb.y;wa[K+10]=Bb.z;wa[K+11]=Bb.w;Cb=lc[M.a];Db=lc[M.b];Eb=lc[M.c];va[K]=Cb.x;va[K+1]=Cb.y;va[K+2]=Cb.z;va[K+3]=Cb.w;va[K+4]=Db.x;va[K+5]=Db.y;va[K+6]=Db.z;va[K+7]=Db.w;va[K+8]=Eb.x;va[K+9]=Eb.y;va[K+10]=Eb.z;va[K+11]=Eb.w;Sb=jc[M.a];Tb=jc[M.b];Ub=jc[M.c];ta[K]=Sb.x;ta[K+1]=Sb.y;ta[K+2]=Sb.z;ta[K+3]=1;ta[K+
-4]=Tb.x;ta[K+5]=Tb.y;ta[K+6]=Tb.z;ta[K+7]=1;ta[K+8]=Ub.x;ta[K+9]=Ub.y;ta[K+10]=Ub.z;ta[K+11]=1;Vb=kc[M.a];Wb=kc[M.b];Xb=kc[M.c];ua[K]=Vb.x;ua[K+1]=Vb.y;ua[K+2]=Vb.z;ua[K+3]=1;ua[K+4]=Wb.x;ua[K+5]=Wb.y;ua[K+6]=Wb.z;ua[K+7]=1;ua[K+8]=Xb.x;ua[K+9]=Xb.y;ua[K+10]=Xb.z;ua[K+11]=1;K=K+12}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];zb=$b[M.a];Ab=$b[M.b];Bb=$b[M.c];Ac=$b[M.d];wa[K]=zb.x;wa[K+1]=zb.y;wa[K+2]=zb.z;wa[K+3]=zb.w;wa[K+4]=Ab.x;wa[K+5]=Ab.y;wa[K+6]=Ab.z;wa[K+7]=Ab.w;wa[K+8]=Bb.x;wa[K+9]=Bb.y;wa[K+10]=
-Bb.z;wa[K+11]=Bb.w;wa[K+12]=Ac.x;wa[K+13]=Ac.y;wa[K+14]=Ac.z;wa[K+15]=Ac.w;Cb=lc[M.a];Db=lc[M.b];Eb=lc[M.c];Bc=lc[M.d];va[K]=Cb.x;va[K+1]=Cb.y;va[K+2]=Cb.z;va[K+3]=Cb.w;va[K+4]=Db.x;va[K+5]=Db.y;va[K+6]=Db.z;va[K+7]=Db.w;va[K+8]=Eb.x;va[K+9]=Eb.y;va[K+10]=Eb.z;va[K+11]=Eb.w;va[K+12]=Bc.x;va[K+13]=Bc.y;va[K+14]=Bc.z;va[K+15]=Bc.w;Sb=jc[M.a];Tb=jc[M.b];Ub=jc[M.c];Mc=jc[M.d];ta[K]=Sb.x;ta[K+1]=Sb.y;ta[K+2]=Sb.z;ta[K+3]=1;ta[K+4]=Tb.x;ta[K+5]=Tb.y;ta[K+6]=Tb.z;ta[K+7]=1;ta[K+8]=Ub.x;ta[K+9]=Ub.y;ta[K+
-10]=Ub.z;ta[K+11]=1;ta[K+12]=Mc.x;ta[K+13]=Mc.y;ta[K+14]=Mc.z;ta[K+15]=1;Vb=kc[M.a];Wb=kc[M.b];Xb=kc[M.c];Nc=kc[M.d];ua[K]=Vb.x;ua[K+1]=Vb.y;ua[K+2]=Vb.z;ua[K+3]=1;ua[K+4]=Wb.x;ua[K+5]=Wb.y;ua[K+6]=Wb.z;ua[K+7]=1;ua[K+8]=Xb.x;ua[K+9]=Xb.y;ua[K+10]=Xb.z;ua[K+11]=1;ua[K+12]=Nc.x;ua[K+13]=Nc.y;ua[K+14]=Nc.z;ua[K+15]=1;K=K+16}if(K>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinVertexABuffer);k.bufferData(k.ARRAY_BUFFER,ta,Za);k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinVertexBBuffer);k.bufferData(k.ARRAY_BUFFER,
-ua,Za);k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinIndicesBuffer);k.bufferData(k.ARRAY_BUFFER,va,Za);k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinWeightsBuffer);k.bufferData(k.ARRAY_BUFFER,wa,Za)}}if(Ed&&cd){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];mb=M.vertexColors;Lc=M.color;if(mb.length===3&&cd===THREE.VertexColors){wb=mb[0];xb=mb[1];yb=mb[2]}else yb=xb=wb=Lc;La[Ba]=wb.r;La[Ba+1]=wb.g;La[Ba+2]=wb.b;La[Ba+3]=xb.r;La[Ba+4]=xb.g;La[Ba+5]=xb.b;La[Ba+6]=yb.r;La[Ba+7]=yb.g;La[Ba+8]=yb.b;Ba=Ba+9}G=0;for(V=
-la.length;G<V;G++){M=Ca[la[G]];mb=M.vertexColors;Lc=M.color;if(mb.length===4&&cd===THREE.VertexColors){wb=mb[0];xb=mb[1];yb=mb[2];zc=mb[3]}else zc=yb=xb=wb=Lc;La[Ba]=wb.r;La[Ba+1]=wb.g;La[Ba+2]=wb.b;La[Ba+3]=xb.r;La[Ba+4]=xb.g;La[Ba+5]=xb.b;La[Ba+6]=yb.r;La[Ba+7]=yb.g;La[Ba+8]=yb.b;La[Ba+9]=zc.r;La[Ba+10]=zc.g;La[Ba+11]=zc.b;Ba=Ba+12}if(Ba>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,La,Za)}}if(Dd&&Ta.hasTangents){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Jb=M.vertexTangents;
-qb=Jb[0];rb=Jb[1];sb=Jb[2];sa[oa]=qb.x;sa[oa+1]=qb.y;sa[oa+2]=qb.z;sa[oa+3]=qb.w;sa[oa+4]=rb.x;sa[oa+5]=rb.y;sa[oa+6]=rb.z;sa[oa+7]=rb.w;sa[oa+8]=sb.x;sa[oa+9]=sb.y;sa[oa+10]=sb.z;sa[oa+11]=sb.w;oa=oa+12}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Jb=M.vertexTangents;qb=Jb[0];rb=Jb[1];sb=Jb[2];xc=Jb[3];sa[oa]=qb.x;sa[oa+1]=qb.y;sa[oa+2]=qb.z;sa[oa+3]=qb.w;sa[oa+4]=rb.x;sa[oa+5]=rb.y;sa[oa+6]=rb.z;sa[oa+7]=rb.w;sa[oa+8]=sb.x;sa[oa+9]=sb.y;sa[oa+10]=sb.z;sa[oa+11]=sb.w;sa[oa+12]=xc.x;sa[oa+13]=xc.y;sa[oa+
-14]=xc.z;sa[oa+15]=xc.w;oa=oa+16}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,sa,Za)}if(Cd&&nd){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];rc=M.vertexNormals;Rb=M.normal;if(rc.length===3&&Kc)for(ja=0;ja<3;ja++){Yb=rc[ja];fb[Qa]=Yb.x;fb[Qa+1]=Yb.y;fb[Qa+2]=Yb.z;Qa=Qa+3}else for(ja=0;ja<3;ja++){fb[Qa]=Rb.x;fb[Qa+1]=Rb.y;fb[Qa+2]=Rb.z;Qa=Qa+3}}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];rc=M.vertexNormals;Rb=M.normal;if(rc.length===4&&Kc)for(ja=0;ja<4;ja++){Yb=rc[ja];fb[Qa]=
-Yb.x;fb[Qa+1]=Yb.y;fb[Qa+2]=Yb.z;Qa=Qa+3}else for(ja=0;ja<4;ja++){fb[Qa]=Rb.x;fb[Qa+1]=Rb.y;fb[Qa+2]=Rb.z;Qa=Qa+3}}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,fb,Za)}if(rd&&gd&&od){G=0;for(V=ka.length;G<V;G++){jb=ka[G];M=Ca[jb];sc=gd[jb];if(sc!==void 0)for(ja=0;ja<3;ja++){uc=sc[ja];Cc[Lb]=uc.u;Cc[Lb+1]=uc.v;Lb=Lb+2}}G=0;for(V=la.length;G<V;G++){jb=la[G];M=Ca[jb];sc=gd[jb];if(sc!==void 0)for(ja=0;ja<4;ja++){uc=sc[ja];Cc[Lb]=uc.u;Cc[Lb+1]=uc.v;Lb=Lb+2}}if(Lb>0){k.bindBuffer(k.ARRAY_BUFFER,
-fa.__webglUVBuffer);k.bufferData(k.ARRAY_BUFFER,Cc,Za)}}if(rd&&hd&&od){G=0;for(V=ka.length;G<V;G++){jb=ka[G];M=Ca[jb];tc=hd[jb];if(tc!==void 0)for(ja=0;ja<3;ja++){vc=tc[ja];Dc[Mb]=vc.u;Dc[Mb+1]=vc.v;Mb=Mb+2}}G=0;for(V=la.length;G<V;G++){jb=la[G];M=Ca[jb];tc=hd[jb];if(tc!==void 0)for(ja=0;ja<4;ja++){vc=tc[ja];Dc[Mb]=vc.u;Dc[Mb+1]=vc.v;Mb=Mb+2}}if(Mb>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglUV2Buffer);k.bufferData(k.ARRAY_BUFFER,Dc,Za)}}if(Bd){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Fb[eb]=ya;Fb[eb+
-1]=ya+1;Fb[eb+2]=ya+2;eb=eb+3;ab[Sa]=ya;ab[Sa+1]=ya+1;ab[Sa+2]=ya;ab[Sa+3]=ya+2;ab[Sa+4]=ya+1;ab[Sa+5]=ya+2;Sa=Sa+6;ya=ya+3}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Fb[eb]=ya;Fb[eb+1]=ya+1;Fb[eb+2]=ya+3;Fb[eb+3]=ya+1;Fb[eb+4]=ya+2;Fb[eb+5]=ya+3;eb=eb+6;ab[Sa]=ya;ab[Sa+1]=ya+1;ab[Sa+2]=ya;ab[Sa+3]=ya+3;ab[Sa+4]=ya+1;ab[Sa+5]=ya+2;ab[Sa+6]=ya+2;ab[Sa+7]=ya+3;Sa=Sa+8;ya=ya+4}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,fa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Fb,Za);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,
-fa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,ab,Za)}if(fd){ja=0;for(pd=fd.length;ja<pd;ja++){y=fd[ja];if(y.__original.needsUpdate){A=0;if(y.size===1)if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];y.array[A]=y.value[M.a];y.array[A+1]=y.value[M.b];y.array[A+2]=y.value[M.c];A=A+3}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];y.array[A]=y.value[M.a];y.array[A+1]=y.value[M.b];y.array[A+2]=y.value[M.c];y.array[A+3]=y.value[M.d];A=A+4}}else{if(y.boundTo===
-"faces"){G=0;for(V=ka.length;G<V;G++){$a=y.value[ka[G]];y.array[A]=$a;y.array[A+1]=$a;y.array[A+2]=$a;A=A+3}G=0;for(V=la.length;G<V;G++){$a=y.value[la[G]];y.array[A]=$a;y.array[A+1]=$a;y.array[A+2]=$a;y.array[A+3]=$a;A=A+4}}}else if(y.size===2)if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;A=A+6}G=0;for(V=la.length;G<
-V;G++){M=Ca[la[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];na=y.value[M.d];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;y.array[A+6]=na.x;y.array[A+7]=na.y;A=A+8}}else{if(y.boundTo==="faces"){G=0;for(V=ka.length;G<V;G++){aa=$=Z=$a=y.value[ka[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;A=A+6}G=0;for(V=la.length;G<V;G++){na=aa=$=Z=$a=y.value[la[G]];y.array[A]=Z.x;y.array[A+1]=
-Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;y.array[A+6]=na.x;y.array[A+7]=na.y;A=A+8}}}else if(y.size===3){var ga;ga=y.type==="c"?["r","g","b"]:["x","y","z"];if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+
-8]=aa[ga[2]];A=A+9}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];na=y.value[M.d];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+8]=aa[ga[2]];y.array[A+9]=na[ga[0]];y.array[A+10]=na[ga[1]];y.array[A+11]=na[ga[2]];A=A+12}}else if(y.boundTo==="faces"){G=0;for(V=ka.length;G<V;G++){aa=$=Z=$a=y.value[ka[G]];y.array[A]=Z[ga[0]];
-y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+8]=aa[ga[2]];A=A+9}G=0;for(V=la.length;G<V;G++){na=aa=$=Z=$a=y.value[la[G]];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+8]=aa[ga[2]];y.array[A+9]=na[ga[0]];y.array[A+10]=na[ga[1]];y.array[A+11]=
-na[ga[2]];A=A+12}}}else if(y.size===4)if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;A=A+12}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];na=y.value[M.d];y.array[A]=
-Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;y.array[A+12]=na.x;y.array[A+13]=na.y;y.array[A+14]=na.z;y.array[A+15]=na.w;A=A+16}}else if(y.boundTo==="faces"){G=0;for(V=ka.length;G<V;G++){aa=$=Z=$a=y.value[ka[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+
-8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;A=A+12}G=0;for(V=la.length;G<V;G++){na=aa=$=Z=$a=y.value[la[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;y.array[A+12]=na.x;y.array[A+13]=na.y;y.array[A+14]=na.z;y.array[A+15]=na.w;A=A+16}}k.bindBuffer(k.ARRAY_BUFFER,y.buffer);k.bufferData(k.ARRAY_BUFFER,y.array,Za)}}}if(Ad){delete fa.__inittedArrays;
-delete fa.__colorArray;delete fa.__normalArray;delete fa.__tangentArray;delete fa.__uvArray;delete fa.__uv2Array;delete fa.__faceArray;delete fa.__vertexArray;delete fa.__lineArray;delete fa.__skinVertexAArray;delete fa.__skinVertexBArray;delete fa.__skinIndexArray;delete fa.__skinWeightArray}}}}da.verticesNeedUpdate=false;da.morphTargetsNeedUpdate=false;da.elementsNeedUpdate=false;da.uvsNeedUpdate=false;da.normalsNeedUpdate=false;da.colorsNeedUpdate=false;da.tangentsNeedUpdate=false;Xa.attributes&&
-p(Xa)}else if(lb instanceof THREE.Ribbon){if(da.verticesNeedUpdate||da.colorsNeedUpdate){var bc=da,sd=k.DYNAMIC_DRAW,Ec=void 0,Fc=void 0,Pc=void 0,cc=void 0,Qc=void 0,td=bc.vertices,ud=bc.colors,Gd=td.length,Hd=ud.length,Rc=bc.__vertexArray,Sc=bc.__colorArray,Id=bc.colorsNeedUpdate;if(bc.verticesNeedUpdate){for(Ec=0;Ec<Gd;Ec++){Pc=td[Ec];cc=Ec*3;Rc[cc]=Pc.x;Rc[cc+1]=Pc.y;Rc[cc+2]=Pc.z}k.bindBuffer(k.ARRAY_BUFFER,bc.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Rc,sd)}if(Id){for(Fc=0;Fc<Hd;Fc++){Qc=
-ud[Fc];cc=Fc*3;Sc[cc]=Qc.r;Sc[cc+1]=Qc.g;Sc[cc+2]=Qc.b}k.bindBuffer(k.ARRAY_BUFFER,bc.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Sc,sd)}}da.verticesNeedUpdate=false;da.colorsNeedUpdate=false}else if(lb instanceof THREE.Line){Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);if(da.verticesNeedUpdate||da.colorsNeedUpdate||oc){var Nb=da,id=k.DYNAMIC_DRAW,Gc=void 0,Hc=void 0,Tc=void 0,xa=void 0,Uc=void 0,vd=Nb.vertices,wd=Nb.colors,Jd=vd.length,Kd=wd.length,Vc=Nb.__vertexArray,Wc=Nb.__colorArray,Ld=Nb.colorsNeedUpdate,
-jd=Nb.__webglCustomAttributesList,Xc=void 0,xd=void 0,Na=void 0,wc=void 0,Ya=void 0,qa=void 0;if(Nb.verticesNeedUpdate){for(Gc=0;Gc<Jd;Gc++){Tc=vd[Gc];xa=Gc*3;Vc[xa]=Tc.x;Vc[xa+1]=Tc.y;Vc[xa+2]=Tc.z}k.bindBuffer(k.ARRAY_BUFFER,Nb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Vc,id)}if(Ld){for(Hc=0;Hc<Kd;Hc++){Uc=wd[Hc];xa=Hc*3;Wc[xa]=Uc.r;Wc[xa+1]=Uc.g;Wc[xa+2]=Uc.b}k.bindBuffer(k.ARRAY_BUFFER,Nb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Wc,id)}if(jd){Xc=0;for(xd=jd.length;Xc<xd;Xc++){qa=
-jd[Xc];if(qa.needsUpdate&&(qa.boundTo===void 0||qa.boundTo==="vertices")){xa=0;wc=qa.value.length;if(qa.size===1)for(Na=0;Na<wc;Na++)qa.array[Na]=qa.value[Na];else if(qa.size===2)for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.x;qa.array[xa+1]=Ya.y;xa=xa+2}else if(qa.size===3)if(qa.type==="c")for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.r;qa.array[xa+1]=Ya.g;qa.array[xa+2]=Ya.b;xa=xa+3}else for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.x;qa.array[xa+1]=Ya.y;qa.array[xa+2]=Ya.z;
-xa=xa+3}else if(qa.size===4)for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.x;qa.array[xa+1]=Ya.y;qa.array[xa+2]=Ya.z;qa.array[xa+3]=Ya.w;xa=xa+4}k.bindBuffer(k.ARRAY_BUFFER,qa.buffer);k.bufferData(k.ARRAY_BUFFER,qa.array,id)}}}}da.verticesNeedUpdate=false;da.colorsNeedUpdate=false;Xa.attributes&&p(Xa)}else if(lb instanceof THREE.ParticleSystem){Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);(da.verticesNeedUpdate||da.colorsNeedUpdate||lb.sortParticles||oc)&&f(da,k.DYNAMIC_DRAW,lb);da.verticesNeedUpdate=
-false;da.colorsNeedUpdate=false;Xa.attributes&&p(Xa)}}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,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 o=THREE.ShaderLib[m];a.uniforms=
-THREE.UniformsUtils.clone(o.uniforms);a.vertexShader=o.vertexShader;a.fragmentShader=o.fragmentShader}var n,p;n=g=e=o=0;for(f=b.length;n<f;n++){p=b[n];if(!p.onlyShadow){p instanceof THREE.DirectionalLight&&g++;p instanceof THREE.PointLight&&e++;p instanceof THREE.SpotLight&&o++}}if(e+o+g<=P){n=g;f=e}else{n=Math.ceil(P*g/(e+g));o=f=P-n}e=n;g=o;o=l=0;for(n=b.length;o<n;o++){p=b[o];if(p.castShadow){p instanceof THREE.SpotLight&&l++;p instanceof THREE.DirectionalLight&&!p.shadowCascade&&l++}}if(dc&&d.useVertexTexture)j=
-1024;else{b=k.getParameter(k.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)")}j=b}var r;a:{p=a.fragmentShader;n=a.vertexShader;var o=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:j,useVertexTexture:dc&&d.useVertexTexture,boneTextureWidth:d.boneTextureWidth,boneTextureHeight:d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,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:d&&d.doubleSided},q,d=[];if(m)d.push(m);else{d.push(p);d.push(n)}for(q in c){d.push(q);d.push(c[q])}m=d.join();q=0;for(d=W.length;q<d;q++){e=W[q];if(e.code===m){e.usedTimes++;r=e.program;break a}}q=k.createProgram();d=["precision "+w+" float;",pb?"#define VERTEX_TEXTURES":"",D.gammaInput?"#define GAMMA_INPUT":"",D.gammaOutput?"#define GAMMA_OUTPUT":"",D.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 objectMatrix;\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");
+var D=this,W=[],R=0,N=null,ba=null,U=-1,I=null,ca=null,ha=0,L=-1,X=-1,S=-1,T=-1,ia=-1,ma=-1,za=-1,Ga=-1,Oa=null,Pa=null,Ua=null,nb=null,gb=0,Ob=0,ob=0,kb=0,ec=0,Va=0,Da=new THREE.Frustum,Aa=new THREE.Matrix4,hb=new THREE.Matrix4,pa=new THREE.Vector4,Fa=new THREE.Vector3,Ra=true,ra={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},k,Za;try{if(!(k=
+z.getContext("experimental-webgl",{alpha:H,premultipliedAlpha:E,antialias:O,stencil:Q,preserveDrawingBuffer:Y})))throw"Error creating WebGL context.";}catch(Gb){console.error(Gb)}a=k.getExtension("OES_texture_float");H=k.getExtension("OES_standard_derivatives");Za=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");H||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
+Za||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");k.clearColor(0,0,0,1);k.clearDepth(1);k.clearStencil(0);k.enable(k.DEPTH_TEST);k.depthFunc(k.LEQUAL);k.frontFace(k.CCW);k.cullFace(k.BACK);k.enable(k.CULL_FACE);k.enable(k.BLEND);k.blendEquation(k.FUNC_ADD);k.blendFunc(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA);k.clearColor(B.r,B.g,B.b,J);this.context=k;H=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Wa=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),
+cb=Za?k.getParameter(Za.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,pb=H>0,dc=pb&&a;this.getContext=function(){return k};this.supportsVertexTextures=function(){return pb};this.getMaxAnisotropy=function(){return cb};this.setSize=function(a,b){z.width=a;z.height=b;this.setViewport(0,0,z.width,z.height)};this.setViewport=function(a,b,c,d){gb=a;Ob=b;ob=c;kb=d;k.viewport(gb,Ob,ob,kb)};this.setScissor=function(a,b,c,d){k.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?k.enable(k.SCISSOR_TEST):k.disable(k.SCISSOR_TEST)};
+this.setClearColorHex=function(a,b){B.setHex(a);J=b;k.clearColor(B.r,B.g,B.b,J)};this.setClearColor=function(a,b){B.copy(a);J=b;k.clearColor(B.r,B.g,B.b,J)};this.getClearColor=function(){return B};this.getClearAlpha=function(){return J};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|k.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|k.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|k.STENCIL_BUFFER_BIT;k.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=
+function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];k.deleteBuffer(c.__webglVertexBuffer);k.deleteBuffer(c.__webglNormalBuffer);
+k.deleteBuffer(c.__webglTangentBuffer);k.deleteBuffer(c.__webglColorBuffer);k.deleteBuffer(c.__webglUVBuffer);k.deleteBuffer(c.__webglUV2Buffer);k.deleteBuffer(c.__webglSkinVertexABuffer);k.deleteBuffer(c.__webglSkinVertexBBuffer);k.deleteBuffer(c.__webglSkinIndicesBuffer);k.deleteBuffer(c.__webglSkinWeightsBuffer);k.deleteBuffer(c.__webglFaceBuffer);k.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d<e;d++)k.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=
+0;for(e=c.numMorphNormals;d<e;d++)k.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=void 0;for(d in c.__webglCustomAttributesList)k.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}D.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);D.info.memory.geometries--}else if(a instanceof THREE.Line){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);
+D.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;k.deleteBuffer(a.__webglVertexBuffer);k.deleteBuffer(a.__webglColorBuffer);D.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;k.deleteTexture(a.__webglTexture);D.info.memory.textures--}};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){k.deleteTexture(a.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){k.deleteFramebuffer(a.__webglFramebuffer[b]);
+k.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{k.deleteFramebuffer(a.__webglFramebuffer);k.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=W.length;a<c;a++){d=W[a];if(d.program===b){d.usedTimes--;d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=W.length;a<c;a++){d=W[a];d.program!==b&&e.push(d)}W=e;k.deleteProgram(b);D.info.memory.programs--}}};this.updateShadowMap=function(a,b){N=null;U=I=Ga=
+za=S=-1;Ra=true;X=L=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=k.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=k.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=k.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=k.createBuffer();if(a.hasPositions){k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,
+a.positionArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.position);k.vertexAttribPointer(b.attributes.position,3,k.FLOAT,false,0,0)}if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,j,i,l,m,n,o,p=a.count*3;for(o=0;o<p;o=o+9){n=a.normalArray;d=n[o];e=n[o+1];f=n[o+2];g=n[o+3];j=n[o+4];l=n[o+5];h=n[o+6];i=n[o+7];m=n[o+8];d=(d+g+h)/3;e=(e+j+i)/3;f=(f+l+m)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+
+7]=e;n[o+8]=f}}k.bufferData(k.ARRAY_BUFFER,a.normalArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.normal);k.vertexAttribPointer(b.attributes.normal,3,k.FLOAT,false,0,0)}if(a.hasUvs&&c.map){k.bindBuffer(k.ARRAY_BUFFER,a.__webglUvBuffer);k.bufferData(k.ARRAY_BUFFER,a.uvArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.uv);k.vertexAttribPointer(b.attributes.uv,2,k.FLOAT,false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer);
+k.bufferData(k.ARRAY_BUFFER,a.colorArray,k.DYNAMIC_DRAW);k.enableVertexAttribArray(b.attributes.color);k.vertexAttribPointer(b.attributes.color,3,k.FLOAT,false,0,0)}k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=q(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==I){I=d;b=true}if(f instanceof THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var g=f[d].index;if(b){var h=e.attributes.position,
+j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.position,j,k.FLOAT,false,0,g*j*4);h=e.attributes.normal;if(a.normal>=0&&h){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.normal,j,k.FLOAT,false,0,g*j*4)}h=e.attributes.uv;if(a.uv>=0&&h)if(h.buffer){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.uv,j,k.FLOAT,false,0,g*j*4);k.enableVertexAttribArray(a.uv)}else k.disableVertexAttribArray(a.uv);h=e.attributes.color;if(a.color>=
+0&&h){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.color,j,k.FLOAT,false,0,g*j*4)}h=e.attributes.tangent;if(a.tangent>=0&&h){j=h.itemSize;k.bindBuffer(k.ARRAY_BUFFER,h.buffer);k.vertexAttribPointer(a.tangent,j,k.FLOAT,false,0,g*j*4)}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}k.drawElements(k.TRIANGLES,f[d].count,k.UNSIGNED_SHORT,f[d].start*2);D.info.render.calls++;D.info.render.vertices=D.info.render.vertices+f[d].count;D.info.render.faces=D.info.render.faces+
+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var g,j,c=q(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==I){I=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(b.position,3,k.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);k.vertexAttribPointer(c.position,
+3,k.FLOAT,false,0,0)}else if(c.position>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglVertexBuffer);k.vertexAttribPointer(c.position,3,k.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var i=0;j=f.morphTargetForcedOrder;for(g=f.morphTargetInfluences;i<d.numSupportedMorphTargets&&i<j.length;){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[j[i]]);k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[j[i]]);
+k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[i]=g[j[i]];i++}}else{j=[];g=f.morphTargetInfluences;var l,m=g.length;for(l=0;l<m;l++){i=g[l];i>0&&j.push([l,i])}if(j.length>d.numSupportedMorphTargets){j.sort(h);j.length=d.numSupportedMorphTargets}else j.length>d.numSupportedMorphNormals?j.sort(h):j.length===0&&j.push([0,0]);for(i=0;i<d.numSupportedMorphTargets;){if(j[i]){l=j[i][0];k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[l]);k.vertexAttribPointer(c["morphTarget"+
+i],3,k.FLOAT,false,0,0);if(d.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[l]);k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[i]=g[l]}else{k.vertexAttribPointer(c["morphTarget"+i],3,k.FLOAT,false,0,0);d.morphNormals&&k.vertexAttribPointer(c["morphNormal"+i],3,k.FLOAT,false,0,0);f.__webglMorphTargetInfluences[i]=0}i++}}d.program.uniforms.morphTargetInfluences!==null&&k.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){g=
+0;for(j=e.__webglCustomAttributesList.length;g<j;g++){c=e.__webglCustomAttributesList[g];if(b[c.buffer.belongsToAttribute]>=0){k.bindBuffer(k.ARRAY_BUFFER,c.buffer);k.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,k.FLOAT,false,0,0)}}}if(b.color>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglColorBuffer);k.vertexAttribPointer(b.color,3,k.FLOAT,false,0,0)}if(b.normal>=0){k.bindBuffer(k.ARRAY_BUFFER,e.__webglNormalBuffer);k.vertexAttribPointer(b.normal,3,k.FLOAT,false,0,0)}if(b.tangent>=0){k.bindBuffer(k.ARRAY_BUFFER,
+e.__webglTangentBuffer);k.vertexAttribPointer(b.tangent,4,k.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer);k.vertexAttribPointer(b.uv,2,k.FLOAT,false,0,0);k.enableVertexAttribArray(b.uv)}else k.disableVertexAttribArray(b.uv);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)}D.info.render.calls++;D.info.render.vertices=D.info.render.vertices+e.__webglFaceCount;D.info.render.faces=D.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);D.info.render.calls++}else if(f instanceof THREE.ParticleSystem){k.drawArrays(k.POINTS,0,e.__webglParticleCount);D.info.render.calls++;D.info.render.points=D.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount);D.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,h,m,o=a.__lights,
+n=a.fog;U=-1;Ra=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);Aa.multiply(b.projectionMatrix,
+b.matrixWorldInverse);Da.setFromMatrix(Aa);this.autoUpdateObjects&&this.initWebGLObjects(a);j(this.renderPluginsPre,a,b);D.info.render.calls=0;D.info.render.vertices=0;D.info.render.faces=0;D.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||
+Da.contains(h))){s(h,b);var p=f,r=p.object,q=p.buffer,t=void 0,t=t=void 0,t=r.material;if(t instanceof THREE.MeshFaceMaterial){t=q.materialIndex;if(t>=0){t=r.geometry.materials[t];if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=null}}}else if(t)if(t.transparent){p.transparent=t;p.opaque=null}else{p.opaque=t;p.transparent=null}f.render=true;if(this.sortObjects)if(h.renderDepth)f.z=h.renderDepth;else{pa.copy(h.matrixWorld.getPosition());Aa.multiplyVector3(pa);f.z=pa.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);u(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits);i(a.__webglObjects,false,"",b,o,n,true,d);l(a.__webglObjectsImmediate,
+"",b,o,n,false,d)}else{this.setBlending(THREE.NormalBlending);i(a.__webglObjects,true,"opaque",b,o,n,false);l(a.__webglObjectsImmediate,"opaque",b,o,n,false);i(a.__webglObjects,false,"transparent",b,o,n,true);l(a.__webglObjectsImmediate,"transparent",b,o,n,true)}j(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;D.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,k,Da):e.render(function(a){D.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,j=void 0,i=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){i=g.geometry;if(i instanceof THREE.Geometry){if(i.geometryGroups===void 0){var q=i,s=void 0,t=void 0,w=void 0,v=void 0,u=void 0,x=void 0,z=void 0,F={},C=q.morphTargets.length,B=q.morphNormals.length;q.geometryGroups={};s=0;for(t=q.faces.length;s<
+t;s++){w=q.faces[s];v=w.materialIndex;x=v!==void 0?v:-1;F[x]===void 0&&(F[x]={hash:x,counter:0});z=F[x].hash+"_"+F[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:C,numMorphNormals:B});u=w instanceof THREE.Face3?3:4;if(q.geometryGroups[z].vertices+u>65535){F[x].counter=F[x].counter+1;z=F[x].hash+"_"+F[x].counter;q.geometryGroups[z]===void 0&&(q.geometryGroups[z]={faces3:[],faces4:[],materialIndex:v,vertices:0,numMorphTargets:C,
+numMorphNormals:B})}w instanceof THREE.Face3?q.geometryGroups[z].faces3.push(s):q.geometryGroups[z].faces4.push(s);q.geometryGroups[z].vertices=q.geometryGroups[z].vertices+u}q.geometryGroupsList=[];var H=void 0;for(H in q.geometryGroups){q.geometryGroups[H].id=ha++;q.geometryGroupsList.push(q.geometryGroups[H])}}for(j in i.geometryGroups){l=i.geometryGroups[j];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 X=void 0,L=void 0;if(I.numMorphTargets){I.__webglMorphTargetsBuffers=[];X=0;for(L=I.numMorphTargets;X<L;X++)I.__webglMorphTargetsBuffers.push(k.createBuffer())}if(I.numMorphNormals){I.__webglMorphNormalsBuffers=
+[];X=0;for(L=I.numMorphNormals;X<L;X++)I.__webglMorphNormalsBuffers.push(k.createBuffer())}D.info.memory.geometries++;var E=l,J=g,T=J.geometry,O=E.faces3,N=E.faces4,S=O.length*3+N.length*4,U=O.length*1+N.length*2,P=O.length*3+N.length*4,Q=c(J,E),ba=e(Q),R=d(Q),Y=Q.vertexColors?Q.vertexColors:false;E.__vertexArray=new Float32Array(S*3);if(R)E.__normalArray=new Float32Array(S*3);if(T.hasTangents)E.__tangentArray=new Float32Array(S*4);if(Y)E.__colorArray=new Float32Array(S*3);if(ba){if(T.faceUvs.length>
+0||T.faceVertexUvs.length>0)E.__uvArray=new Float32Array(S*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>1)E.__uv2Array=new Float32Array(S*2)}if(J.geometry.skinWeights.length&&J.geometry.skinIndices.length){E.__skinVertexAArray=new Float32Array(S*4);E.__skinVertexBArray=new Float32Array(S*4);E.__skinIndexArray=new Float32Array(S*4);E.__skinWeightArray=new Float32Array(S*4)}E.__faceArray=new Uint16Array(U*3);E.__lineArray=new Uint16Array(P*2);var W=void 0,ca=void 0;if(E.numMorphTargets){E.__morphTargetsArrays=
+[];W=0;for(ca=E.numMorphTargets;W<ca;W++)E.__morphTargetsArrays.push(new Float32Array(S*3))}if(E.numMorphNormals){E.__morphNormalsArrays=[];W=0;for(ca=E.numMorphNormals;W<ca;W++)E.__morphNormalsArrays.push(new Float32Array(S*3))}E.__webglFaceCount=U*3;E.__webglLineCount=P*2;if(Q.attributes){if(E.__webglCustomAttributesList===void 0)E.__webglCustomAttributesList=[];var ia=void 0;for(ia in Q.attributes){var Ga=Q.attributes[ia],ma={},za;for(za in Ga)ma[za]=Ga[za];if(!ma.__webglInitialized||ma.createUniqueBuffers){ma.__webglInitialized=
+true;var Ua=1;ma.type==="v2"?Ua=2:ma.type==="v3"?Ua=3:ma.type==="v4"?Ua=4:ma.type==="c"&&(Ua=3);ma.size=Ua;ma.array=new Float32Array(S*Ua);ma.buffer=k.createBuffer();ma.buffer.belongsToAttribute=ia;Ga.needsUpdate=true;ma.__original=Ga}E.__webglCustomAttributesList.push(ma)}}E.__inittedArrays=true;i.verticesNeedUpdate=true;i.morphTargetsNeedUpdate=true;i.elementsNeedUpdate=true;i.uvsNeedUpdate=true;i.normalsNeedUpdate=true;i.tangentsNeedUpdate=true;i.colorsNeedUpdate=true}}}else if(i instanceof THREE.BufferGeometry){var Oa=
+i,Pa=void 0,pa=void 0,ra=void 0;for(Pa in Oa.attributes){ra=Pa==="index"?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER;pa=Oa.attributes[Pa];pa.buffer=k.createBuffer();k.bindBuffer(ra,pa.buffer);k.bufferData(ra,pa.array,k.STATIC_DRAW)}}}else if(g instanceof THREE.Ribbon){i=g.geometry;if(!i.__webglVertexBuffer){var Aa=i;Aa.__webglVertexBuffer=k.createBuffer();Aa.__webglColorBuffer=k.createBuffer();D.info.memory.geometries++;var Da=i,Fa=Da.vertices.length;Da.__vertexArray=new Float32Array(Fa*3);Da.__colorArray=
+new Float32Array(Fa*3);Da.__webglVertexCount=Fa;i.verticesNeedUpdate=true;i.colorsNeedUpdate=true}}else if(g instanceof THREE.Line){i=g.geometry;if(!i.__webglVertexBuffer){var nb=i;nb.__webglVertexBuffer=k.createBuffer();nb.__webglColorBuffer=k.createBuffer();D.info.memory.geometries++;var gb=i,Wa=g,Ra=gb.vertices.length;gb.__vertexArray=new Float32Array(Ra*3);gb.__colorArray=new Float32Array(Ra*3);gb.__webglLineCount=Ra;b(gb,Wa);i.verticesNeedUpdate=true;i.colorsNeedUpdate=true}}else if(g instanceof
+THREE.ParticleSystem){i=g.geometry;if(!i.__webglVertexBuffer){var Za=i;Za.__webglVertexBuffer=k.createBuffer();Za.__webglColorBuffer=k.createBuffer();D.info.geometries++;var Va=i,Ob=g,ob=Va.vertices.length;Va.__vertexArray=new Float32Array(ob*3);Va.__colorArray=new Float32Array(ob*3);Va.__sortArray=[];Va.__webglParticleCount=ob;b(Va,Ob);i.verticesNeedUpdate=true;i.colorsNeedUpdate=true}}}if(!g.__webglActive){if(g instanceof THREE.Mesh){i=g.geometry;if(i instanceof THREE.BufferGeometry)o(h.__webglObjects,
+i,g);else for(j in i.geometryGroups){l=i.geometryGroups[j];o(h.__webglObjects,l,g)}}else if(g instanceof THREE.Ribbon||g instanceof THREE.Line||g instanceof THREE.ParticleSystem){i=g.geometry;o(h.__webglObjects,i,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?m(kb.__webglSprites,db):db instanceof THREE.LensFlare?m(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,da=lb.geometry,cb=void 0,oc=void 0,Xa=void 0;if(lb instanceof THREE.Mesh)if(da instanceof THREE.BufferGeometry){if(da.verticesNeedUpdate||da.elementsNeedUpdate||da.uvsNeedUpdate||da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate){var Ib=da,pc=k.DYNAMIC_DRAW,ec=!da.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}}da.verticesNeedUpdate=false;da.elementsNeedUpdate=false;da.uvsNeedUpdate=false;da.normalsNeedUpdate=false;da.colorsNeedUpdate=false;da.tangentsNeedUpdate=false}else{for(var bd=0,yd=da.geometryGroupsList.length;bd<yd;bd++){cb=da.geometryGroupsList[bd];Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);if(da.verticesNeedUpdate||
+da.morphTargetsNeedUpdate||da.elementsNeedUpdate||da.uvsNeedUpdate||da.normalsNeedUpdate||da.colorsNeedUpdate||da.tangentsNeedUpdate||oc){var fa=cb,zd=lb,$a=k.DYNAMIC_DRAW,Ad=!da.dynamic,hc=Xa;if(fa.__inittedArrays){var nd=d(hc),cd=hc.vertexColors?hc.vertexColors:false,od=e(hc),Kc=nd===THREE.SmoothShading,G=void 0,V=void 0,jb=void 0,M=void 0,rc=void 0,Rb=void 0,mb=void 0,Lc=void 0,Jb=void 0,sc=void 0,tc=void 0,Z=void 0,$=void 0,aa=void 0,na=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,ja=void 0,pd=void 0,Yb=void 0,uc=void 0,vc=void 0,Ja=void 0,qd=void 0,Ha=void 0,Ia=void 0,Zb=void 0,Kb=void 0,ya=0,Ea=0,Lb=0,Mb=0,eb=0,Qa=0,oa=0,Sa=0,Ba=0,K=0,ea=0,A=0,ab=void 0,Ka=fa.__vertexArray,Cc=fa.__uvArray,Dc=fa.__uv2Array,fb=fa.__normalArray,sa=fa.__tangentArray,
+La=fa.__colorArray,ta=fa.__skinVertexAArray,ua=fa.__skinVertexBArray,va=fa.__skinIndexArray,wa=fa.__skinWeightArray,dd=fa.__morphTargetsArrays,ed=fa.__morphNormalsArrays,fd=fa.__webglCustomAttributesList,y=void 0,Fb=fa.__faceArray,bb=fa.__lineArray,Ta=zd.geometry,Bd=Ta.elementsNeedUpdate,rd=Ta.uvsNeedUpdate,Cd=Ta.normalsNeedUpdate,Dd=Ta.tangentsNeedUpdate,Ed=Ta.colorsNeedUpdate,Fd=Ta.morphTargetsNeedUpdate,ic=Ta.vertices,ka=fa.faces3,la=fa.faces4,Ca=Ta.faces,gd=Ta.faceVertexUvs[0],hd=Ta.faceVertexUvs[1],
+jc=Ta.skinVerticesA,kc=Ta.skinVerticesB,lc=Ta.skinIndices,$b=Ta.skinWeights,ac=Ta.morphTargets,Oc=Ta.morphNormals;if(Ta.verticesNeedUpdate){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=ic[M.a];$=ic[M.b];aa=ic[M.c];Ka[Ea]=Z.x;Ka[Ea+1]=Z.y;Ka[Ea+2]=Z.z;Ka[Ea+3]=$.x;Ka[Ea+4]=$.y;Ka[Ea+5]=$.z;Ka[Ea+6]=aa.x;Ka[Ea+7]=aa.y;Ka[Ea+8]=aa.z;Ea=Ea+9}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Z=ic[M.a];$=ic[M.b];aa=ic[M.c];na=ic[M.d];Ka[Ea]=Z.x;Ka[Ea+1]=Z.y;Ka[Ea+2]=Z.z;Ka[Ea+3]=$.x;Ka[Ea+4]=$.y;Ka[Ea+5]=$.z;Ka[Ea+
+6]=aa.x;Ka[Ea+7]=aa.y;Ka[Ea+8]=aa.z;Ka[Ea+9]=na.x;Ka[Ea+10]=na.y;Ka[Ea+11]=na.z;Ea=Ea+12}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ka,$a)}if(Fd){Ja=0;for(qd=ac.length;Ja<qd;Ja++){G=ea=0;for(V=ka.length;G<V;G++){Zb=ka[G];M=Ca[Zb];Z=ac[Ja].vertices[M.a];$=ac[Ja].vertices[M.b];aa=ac[Ja].vertices[M.c];Ha=dd[Ja];Ha[ea]=Z.x;Ha[ea+1]=Z.y;Ha[ea+2]=Z.z;Ha[ea+3]=$.x;Ha[ea+4]=$.y;Ha[ea+5]=$.z;Ha[ea+6]=aa.x;Ha[ea+7]=aa.y;Ha[ea+8]=aa.z;if(hc.morphNormals){if(Kc){Kb=Oc[Ja].vertexNormals[Zb];
+tb=Kb.a;ub=Kb.b;vb=Kb.c}else vb=ub=tb=Oc[Ja].faceNormals[Zb];Ia=ed[Ja];Ia[ea]=tb.x;Ia[ea+1]=tb.y;Ia[ea+2]=tb.z;Ia[ea+3]=ub.x;Ia[ea+4]=ub.y;Ia[ea+5]=ub.z;Ia[ea+6]=vb.x;Ia[ea+7]=vb.y;Ia[ea+8]=vb.z}ea=ea+9}G=0;for(V=la.length;G<V;G++){Zb=la[G];M=Ca[Zb];Z=ac[Ja].vertices[M.a];$=ac[Ja].vertices[M.b];aa=ac[Ja].vertices[M.c];na=ac[Ja].vertices[M.d];Ha=dd[Ja];Ha[ea]=Z.x;Ha[ea+1]=Z.y;Ha[ea+2]=Z.z;Ha[ea+3]=$.x;Ha[ea+4]=$.y;Ha[ea+5]=$.z;Ha[ea+6]=aa.x;Ha[ea+7]=aa.y;Ha[ea+8]=aa.z;Ha[ea+9]=na.x;Ha[ea+10]=na.y;
+Ha[ea+11]=na.z;if(hc.morphNormals){if(Kc){Kb=Oc[Ja].vertexNormals[Zb];tb=Kb.a;ub=Kb.b;vb=Kb.c;yc=Kb.d}else yc=vb=ub=tb=Oc[Ja].faceNormals[Zb];Ia=ed[Ja];Ia[ea]=tb.x;Ia[ea+1]=tb.y;Ia[ea+2]=tb.z;Ia[ea+3]=ub.x;Ia[ea+4]=ub.y;Ia[ea+5]=ub.z;Ia[ea+6]=vb.x;Ia[ea+7]=vb.y;Ia[ea+8]=vb.z;Ia[ea+9]=yc.x;Ia[ea+10]=yc.y;Ia[ea+11]=yc.z}ea=ea+12}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglMorphTargetsBuffers[Ja]);k.bufferData(k.ARRAY_BUFFER,dd[Ja],$a);if(hc.morphNormals){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglMorphNormalsBuffers[Ja]);
+k.bufferData(k.ARRAY_BUFFER,ed[Ja],$a)}}}if($b.length){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];zb=$b[M.a];Ab=$b[M.b];Bb=$b[M.c];wa[K]=zb.x;wa[K+1]=zb.y;wa[K+2]=zb.z;wa[K+3]=zb.w;wa[K+4]=Ab.x;wa[K+5]=Ab.y;wa[K+6]=Ab.z;wa[K+7]=Ab.w;wa[K+8]=Bb.x;wa[K+9]=Bb.y;wa[K+10]=Bb.z;wa[K+11]=Bb.w;Cb=lc[M.a];Db=lc[M.b];Eb=lc[M.c];va[K]=Cb.x;va[K+1]=Cb.y;va[K+2]=Cb.z;va[K+3]=Cb.w;va[K+4]=Db.x;va[K+5]=Db.y;va[K+6]=Db.z;va[K+7]=Db.w;va[K+8]=Eb.x;va[K+9]=Eb.y;va[K+10]=Eb.z;va[K+11]=Eb.w;Sb=jc[M.a];Tb=jc[M.b];Ub=jc[M.c];
+ta[K]=Sb.x;ta[K+1]=Sb.y;ta[K+2]=Sb.z;ta[K+3]=1;ta[K+4]=Tb.x;ta[K+5]=Tb.y;ta[K+6]=Tb.z;ta[K+7]=1;ta[K+8]=Ub.x;ta[K+9]=Ub.y;ta[K+10]=Ub.z;ta[K+11]=1;Vb=kc[M.a];Wb=kc[M.b];Xb=kc[M.c];ua[K]=Vb.x;ua[K+1]=Vb.y;ua[K+2]=Vb.z;ua[K+3]=1;ua[K+4]=Wb.x;ua[K+5]=Wb.y;ua[K+6]=Wb.z;ua[K+7]=1;ua[K+8]=Xb.x;ua[K+9]=Xb.y;ua[K+10]=Xb.z;ua[K+11]=1;K=K+12}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];zb=$b[M.a];Ab=$b[M.b];Bb=$b[M.c];Ac=$b[M.d];wa[K]=zb.x;wa[K+1]=zb.y;wa[K+2]=zb.z;wa[K+3]=zb.w;wa[K+4]=Ab.x;wa[K+5]=Ab.y;wa[K+6]=
+Ab.z;wa[K+7]=Ab.w;wa[K+8]=Bb.x;wa[K+9]=Bb.y;wa[K+10]=Bb.z;wa[K+11]=Bb.w;wa[K+12]=Ac.x;wa[K+13]=Ac.y;wa[K+14]=Ac.z;wa[K+15]=Ac.w;Cb=lc[M.a];Db=lc[M.b];Eb=lc[M.c];Bc=lc[M.d];va[K]=Cb.x;va[K+1]=Cb.y;va[K+2]=Cb.z;va[K+3]=Cb.w;va[K+4]=Db.x;va[K+5]=Db.y;va[K+6]=Db.z;va[K+7]=Db.w;va[K+8]=Eb.x;va[K+9]=Eb.y;va[K+10]=Eb.z;va[K+11]=Eb.w;va[K+12]=Bc.x;va[K+13]=Bc.y;va[K+14]=Bc.z;va[K+15]=Bc.w;Sb=jc[M.a];Tb=jc[M.b];Ub=jc[M.c];Mc=jc[M.d];ta[K]=Sb.x;ta[K+1]=Sb.y;ta[K+2]=Sb.z;ta[K+3]=1;ta[K+4]=Tb.x;ta[K+5]=Tb.y;
+ta[K+6]=Tb.z;ta[K+7]=1;ta[K+8]=Ub.x;ta[K+9]=Ub.y;ta[K+10]=Ub.z;ta[K+11]=1;ta[K+12]=Mc.x;ta[K+13]=Mc.y;ta[K+14]=Mc.z;ta[K+15]=1;Vb=kc[M.a];Wb=kc[M.b];Xb=kc[M.c];Nc=kc[M.d];ua[K]=Vb.x;ua[K+1]=Vb.y;ua[K+2]=Vb.z;ua[K+3]=1;ua[K+4]=Wb.x;ua[K+5]=Wb.y;ua[K+6]=Wb.z;ua[K+7]=1;ua[K+8]=Xb.x;ua[K+9]=Xb.y;ua[K+10]=Xb.z;ua[K+11]=1;ua[K+12]=Nc.x;ua[K+13]=Nc.y;ua[K+14]=Nc.z;ua[K+15]=1;K=K+16}if(K>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinVertexABuffer);k.bufferData(k.ARRAY_BUFFER,ta,$a);k.bindBuffer(k.ARRAY_BUFFER,
+fa.__webglSkinVertexBBuffer);k.bufferData(k.ARRAY_BUFFER,ua,$a);k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinIndicesBuffer);k.bufferData(k.ARRAY_BUFFER,va,$a);k.bindBuffer(k.ARRAY_BUFFER,fa.__webglSkinWeightsBuffer);k.bufferData(k.ARRAY_BUFFER,wa,$a)}}if(Ed&&cd){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];mb=M.vertexColors;Lc=M.color;if(mb.length===3&&cd===THREE.VertexColors){wb=mb[0];xb=mb[1];yb=mb[2]}else yb=xb=wb=Lc;La[Ba]=wb.r;La[Ba+1]=wb.g;La[Ba+2]=wb.b;La[Ba+3]=xb.r;La[Ba+4]=xb.g;La[Ba+5]=xb.b;La[Ba+
+6]=yb.r;La[Ba+7]=yb.g;La[Ba+8]=yb.b;Ba=Ba+9}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];mb=M.vertexColors;Lc=M.color;if(mb.length===4&&cd===THREE.VertexColors){wb=mb[0];xb=mb[1];yb=mb[2];zc=mb[3]}else zc=yb=xb=wb=Lc;La[Ba]=wb.r;La[Ba+1]=wb.g;La[Ba+2]=wb.b;La[Ba+3]=xb.r;La[Ba+4]=xb.g;La[Ba+5]=xb.b;La[Ba+6]=yb.r;La[Ba+7]=yb.g;La[Ba+8]=yb.b;La[Ba+9]=zc.r;La[Ba+10]=zc.g;La[Ba+11]=zc.b;Ba=Ba+12}if(Ba>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,La,$a)}}if(Dd&&Ta.hasTangents){G=
+0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Jb=M.vertexTangents;qb=Jb[0];rb=Jb[1];sb=Jb[2];sa[oa]=qb.x;sa[oa+1]=qb.y;sa[oa+2]=qb.z;sa[oa+3]=qb.w;sa[oa+4]=rb.x;sa[oa+5]=rb.y;sa[oa+6]=rb.z;sa[oa+7]=rb.w;sa[oa+8]=sb.x;sa[oa+9]=sb.y;sa[oa+10]=sb.z;sa[oa+11]=sb.w;oa=oa+12}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Jb=M.vertexTangents;qb=Jb[0];rb=Jb[1];sb=Jb[2];xc=Jb[3];sa[oa]=qb.x;sa[oa+1]=qb.y;sa[oa+2]=qb.z;sa[oa+3]=qb.w;sa[oa+4]=rb.x;sa[oa+5]=rb.y;sa[oa+6]=rb.z;sa[oa+7]=rb.w;sa[oa+8]=sb.x;sa[oa+9]=sb.y;sa[oa+
+10]=sb.z;sa[oa+11]=sb.w;sa[oa+12]=xc.x;sa[oa+13]=xc.y;sa[oa+14]=xc.z;sa[oa+15]=xc.w;oa=oa+16}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,sa,$a)}if(Cd&&nd){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];rc=M.vertexNormals;Rb=M.normal;if(rc.length===3&&Kc)for(ja=0;ja<3;ja++){Yb=rc[ja];fb[Qa]=Yb.x;fb[Qa+1]=Yb.y;fb[Qa+2]=Yb.z;Qa=Qa+3}else for(ja=0;ja<3;ja++){fb[Qa]=Rb.x;fb[Qa+1]=Rb.y;fb[Qa+2]=Rb.z;Qa=Qa+3}}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];rc=M.vertexNormals;Rb=M.normal;
+if(rc.length===4&&Kc)for(ja=0;ja<4;ja++){Yb=rc[ja];fb[Qa]=Yb.x;fb[Qa+1]=Yb.y;fb[Qa+2]=Yb.z;Qa=Qa+3}else for(ja=0;ja<4;ja++){fb[Qa]=Rb.x;fb[Qa+1]=Rb.y;fb[Qa+2]=Rb.z;Qa=Qa+3}}k.bindBuffer(k.ARRAY_BUFFER,fa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,fb,$a)}if(rd&&gd&&od){G=0;for(V=ka.length;G<V;G++){jb=ka[G];M=Ca[jb];sc=gd[jb];if(sc!==void 0)for(ja=0;ja<3;ja++){uc=sc[ja];Cc[Lb]=uc.u;Cc[Lb+1]=uc.v;Lb=Lb+2}}G=0;for(V=la.length;G<V;G++){jb=la[G];M=Ca[jb];sc=gd[jb];if(sc!==void 0)for(ja=0;ja<4;ja++){uc=
+sc[ja];Cc[Lb]=uc.u;Cc[Lb+1]=uc.v;Lb=Lb+2}}if(Lb>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglUVBuffer);k.bufferData(k.ARRAY_BUFFER,Cc,$a)}}if(rd&&hd&&od){G=0;for(V=ka.length;G<V;G++){jb=ka[G];M=Ca[jb];tc=hd[jb];if(tc!==void 0)for(ja=0;ja<3;ja++){vc=tc[ja];Dc[Mb]=vc.u;Dc[Mb+1]=vc.v;Mb=Mb+2}}G=0;for(V=la.length;G<V;G++){jb=la[G];M=Ca[jb];tc=hd[jb];if(tc!==void 0)for(ja=0;ja<4;ja++){vc=tc[ja];Dc[Mb]=vc.u;Dc[Mb+1]=vc.v;Mb=Mb+2}}if(Mb>0){k.bindBuffer(k.ARRAY_BUFFER,fa.__webglUV2Buffer);k.bufferData(k.ARRAY_BUFFER,
+Dc,$a)}}if(Bd){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Fb[eb]=ya;Fb[eb+1]=ya+1;Fb[eb+2]=ya+2;eb=eb+3;bb[Sa]=ya;bb[Sa+1]=ya+1;bb[Sa+2]=ya;bb[Sa+3]=ya+2;bb[Sa+4]=ya+1;bb[Sa+5]=ya+2;Sa=Sa+6;ya=ya+3}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Fb[eb]=ya;Fb[eb+1]=ya+1;Fb[eb+2]=ya+3;Fb[eb+3]=ya+1;Fb[eb+4]=ya+2;Fb[eb+5]=ya+3;eb=eb+6;bb[Sa]=ya;bb[Sa+1]=ya+1;bb[Sa+2]=ya;bb[Sa+3]=ya+3;bb[Sa+4]=ya+1;bb[Sa+5]=ya+2;bb[Sa+6]=ya+2;bb[Sa+7]=ya+3;Sa=Sa+8;ya=ya+4}k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,fa.__webglFaceBuffer);
+k.bufferData(k.ELEMENT_ARRAY_BUFFER,Fb,$a);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,fa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,bb,$a)}if(fd){ja=0;for(pd=fd.length;ja<pd;ja++){y=fd[ja];if(y.__original.needsUpdate){A=0;if(y.size===1)if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];y.array[A]=y.value[M.a];y.array[A+1]=y.value[M.b];y.array[A+2]=y.value[M.c];A=A+3}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];y.array[A]=y.value[M.a];y.array[A+1]=y.value[M.b];
+y.array[A+2]=y.value[M.c];y.array[A+3]=y.value[M.d];A=A+4}}else{if(y.boundTo==="faces"){G=0;for(V=ka.length;G<V;G++){ab=y.value[ka[G]];y.array[A]=ab;y.array[A+1]=ab;y.array[A+2]=ab;A=A+3}G=0;for(V=la.length;G<V;G++){ab=y.value[la[G]];y.array[A]=ab;y.array[A+1]=ab;y.array[A+2]=ab;y.array[A+3]=ab;A=A+4}}}else if(y.size===2)if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=
+$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;A=A+6}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];na=y.value[M.d];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;y.array[A+6]=na.x;y.array[A+7]=na.y;A=A+8}}else{if(y.boundTo==="faces"){G=0;for(V=ka.length;G<V;G++){aa=$=Z=ab=y.value[ka[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;A=A+6}G=
+0;for(V=la.length;G<V;G++){na=aa=$=Z=ab=y.value[la[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=$.x;y.array[A+3]=$.y;y.array[A+4]=aa.x;y.array[A+5]=aa.y;y.array[A+6]=na.x;y.array[A+7]=na.y;A=A+8}}}else if(y.size===3){var ga;ga=y.type==="c"?["r","g","b"]:["x","y","z"];if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+
+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+8]=aa[ga[2]];A=A+9}G=0;for(V=la.length;G<V;G++){M=Ca[la[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];na=y.value[M.d];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+8]=aa[ga[2]];y.array[A+9]=na[ga[0]];y.array[A+10]=na[ga[1]];y.array[A+11]=na[ga[2]];A=A+12}}else if(y.boundTo===
+"faces"){G=0;for(V=ka.length;G<V;G++){aa=$=Z=ab=y.value[ka[G]];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];y.array[A+8]=aa[ga[2]];A=A+9}G=0;for(V=la.length;G<V;G++){na=aa=$=Z=ab=y.value[la[G]];y.array[A]=Z[ga[0]];y.array[A+1]=Z[ga[1]];y.array[A+2]=Z[ga[2]];y.array[A+3]=$[ga[0]];y.array[A+4]=$[ga[1]];y.array[A+5]=$[ga[2]];y.array[A+6]=aa[ga[0]];y.array[A+7]=aa[ga[1]];
+y.array[A+8]=aa[ga[2]];y.array[A+9]=na[ga[0]];y.array[A+10]=na[ga[1]];y.array[A+11]=na[ga[2]];A=A+12}}}else if(y.size===4)if(y.boundTo===void 0||y.boundTo==="vertices"){G=0;for(V=ka.length;G<V;G++){M=Ca[ka[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;A=A+12}G=0;for(V=la.length;G<V;G++){M=
+Ca[la[G]];Z=y.value[M.a];$=y.value[M.b];aa=y.value[M.c];na=y.value[M.d];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;y.array[A+12]=na.x;y.array[A+13]=na.y;y.array[A+14]=na.z;y.array[A+15]=na.w;A=A+16}}else if(y.boundTo==="faces"){G=0;for(V=ka.length;G<V;G++){aa=$=Z=ab=y.value[ka[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+
+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;A=A+12}G=0;for(V=la.length;G<V;G++){na=aa=$=Z=ab=y.value[la[G]];y.array[A]=Z.x;y.array[A+1]=Z.y;y.array[A+2]=Z.z;y.array[A+3]=Z.w;y.array[A+4]=$.x;y.array[A+5]=$.y;y.array[A+6]=$.z;y.array[A+7]=$.w;y.array[A+8]=aa.x;y.array[A+9]=aa.y;y.array[A+10]=aa.z;y.array[A+11]=aa.w;y.array[A+12]=na.x;y.array[A+13]=na.y;y.array[A+14]=na.z;y.array[A+15]=na.w;A=A+
+16}}k.bindBuffer(k.ARRAY_BUFFER,y.buffer);k.bufferData(k.ARRAY_BUFFER,y.array,$a)}}}if(Ad){delete fa.__inittedArrays;delete fa.__colorArray;delete fa.__normalArray;delete fa.__tangentArray;delete fa.__uvArray;delete fa.__uv2Array;delete fa.__faceArray;delete fa.__vertexArray;delete fa.__lineArray;delete fa.__skinVertexAArray;delete fa.__skinVertexBArray;delete fa.__skinIndexArray;delete fa.__skinWeightArray}}}}da.verticesNeedUpdate=false;da.morphTargetsNeedUpdate=false;da.elementsNeedUpdate=false;
+da.uvsNeedUpdate=false;da.normalsNeedUpdate=false;da.colorsNeedUpdate=false;da.tangentsNeedUpdate=false;Xa.attributes&&p(Xa)}else if(lb instanceof THREE.Ribbon){if(da.verticesNeedUpdate||da.colorsNeedUpdate){var bc=da,sd=k.DYNAMIC_DRAW,Ec=void 0,Fc=void 0,Pc=void 0,cc=void 0,Qc=void 0,td=bc.vertices,ud=bc.colors,Gd=td.length,Hd=ud.length,Rc=bc.__vertexArray,Sc=bc.__colorArray,Id=bc.colorsNeedUpdate;if(bc.verticesNeedUpdate){for(Ec=0;Ec<Gd;Ec++){Pc=td[Ec];cc=Ec*3;Rc[cc]=Pc.x;Rc[cc+1]=Pc.y;Rc[cc+2]=
+Pc.z}k.bindBuffer(k.ARRAY_BUFFER,bc.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Rc,sd)}if(Id){for(Fc=0;Fc<Hd;Fc++){Qc=ud[Fc];cc=Fc*3;Sc[cc]=Qc.r;Sc[cc+1]=Qc.g;Sc[cc+2]=Qc.b}k.bindBuffer(k.ARRAY_BUFFER,bc.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Sc,sd)}}da.verticesNeedUpdate=false;da.colorsNeedUpdate=false}else if(lb instanceof THREE.Line){Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);if(da.verticesNeedUpdate||da.colorsNeedUpdate||oc){var Nb=da,id=k.DYNAMIC_DRAW,Gc=void 0,Hc=void 0,Tc=void 0,xa=
+void 0,Uc=void 0,vd=Nb.vertices,wd=Nb.colors,Jd=vd.length,Kd=wd.length,Vc=Nb.__vertexArray,Wc=Nb.__colorArray,Ld=Nb.colorsNeedUpdate,jd=Nb.__webglCustomAttributesList,Xc=void 0,xd=void 0,Na=void 0,wc=void 0,Ya=void 0,qa=void 0;if(Nb.verticesNeedUpdate){for(Gc=0;Gc<Jd;Gc++){Tc=vd[Gc];xa=Gc*3;Vc[xa]=Tc.x;Vc[xa+1]=Tc.y;Vc[xa+2]=Tc.z}k.bindBuffer(k.ARRAY_BUFFER,Nb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Vc,id)}if(Ld){for(Hc=0;Hc<Kd;Hc++){Uc=wd[Hc];xa=Hc*3;Wc[xa]=Uc.r;Wc[xa+1]=Uc.g;Wc[xa+2]=Uc.b}k.bindBuffer(k.ARRAY_BUFFER,
+Nb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Wc,id)}if(jd){Xc=0;for(xd=jd.length;Xc<xd;Xc++){qa=jd[Xc];if(qa.needsUpdate&&(qa.boundTo===void 0||qa.boundTo==="vertices")){xa=0;wc=qa.value.length;if(qa.size===1)for(Na=0;Na<wc;Na++)qa.array[Na]=qa.value[Na];else if(qa.size===2)for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.x;qa.array[xa+1]=Ya.y;xa=xa+2}else if(qa.size===3)if(qa.type==="c")for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.r;qa.array[xa+1]=Ya.g;qa.array[xa+2]=Ya.b;xa=xa+
+3}else for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.x;qa.array[xa+1]=Ya.y;qa.array[xa+2]=Ya.z;xa=xa+3}else if(qa.size===4)for(Na=0;Na<wc;Na++){Ya=qa.value[Na];qa.array[xa]=Ya.x;qa.array[xa+1]=Ya.y;qa.array[xa+2]=Ya.z;qa.array[xa+3]=Ya.w;xa=xa+4}k.bindBuffer(k.ARRAY_BUFFER,qa.buffer);k.bufferData(k.ARRAY_BUFFER,qa.array,id)}}}}da.verticesNeedUpdate=false;da.colorsNeedUpdate=false;Xa.attributes&&p(Xa)}else if(lb instanceof THREE.ParticleSystem){Xa=c(lb,cb);oc=Xa.attributes&&n(Xa);(da.verticesNeedUpdate||
+da.colorsNeedUpdate||lb.sortParticles||oc)&&f(da,k.DYNAMIC_DRAW,lb);da.verticesNeedUpdate=false;da.colorsNeedUpdate=false;Xa.attributes&&p(Xa)}}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,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 o=THREE.ShaderLib[m];a.uniforms=THREE.UniformsUtils.clone(o.uniforms);a.vertexShader=o.vertexShader;a.fragmentShader=o.fragmentShader}var n,p;n=g=e=o=0;for(f=b.length;n<f;n++){p=b[n];if(!p.onlyShadow){p instanceof THREE.DirectionalLight&&g++;p instanceof THREE.PointLight&&e++;p instanceof THREE.SpotLight&&o++}}if(e+o+g<=P){n=g;f=e}else{n=Math.ceil(P*g/(e+g));o=f=P-n}e=n;g=o;o=l=0;for(n=b.length;o<n;o++){p=b[o];if(p.castShadow){p instanceof
+THREE.SpotLight&&l++;p instanceof THREE.DirectionalLight&&!p.shadowCascade&&l++}}if(dc&&d.useVertexTexture)j=1024;else{b=k.getParameter(k.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)")}j=b}var r;a:{p=a.fragmentShader;n=a.vertexShader;var o=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:j,useVertexTexture:dc&&d.useVertexTexture,boneTextureWidth:d.boneTextureWidth,boneTextureHeight:d.boneTextureHeight,morphTargets:a.morphTargets,morphNormals:a.morphNormals,maxMorphTargets:this.maxMorphTargets,maxMorphNormals:this.maxMorphNormals,maxDirLights:e,maxPointLights:f,maxSpotLights:g,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:d&&d.doubleSided},q,d=[];if(m)d.push(m);else{d.push(p);d.push(n)}for(q in c){d.push(q);d.push(c[q])}m=d.join();q=0;for(d=W.length;q<d;q++){e=W[q];if(e.code===m){e.usedTimes++;r=e.program;break a}}q=k.createProgram();d=["precision "+w+" float;",pb?"#define VERTEX_TEXTURES":"",D.gammaInput?"#define GAMMA_INPUT":
+"",D.gammaOutput?"#define GAMMA_OUTPUT":"",D.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 objectMatrix;\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 "+w+" 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:"",D.gammaInput?"#define GAMMA_INPUT":"",D.gammaOutput?"#define GAMMA_OUTPUT":"",D.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=t("fragment",e+p);d=t("vertex",d+n);k.attachShader(q,d);k.attachShader(q,e);k.linkProgram(q);k.getProgramParameter(q,k.LINK_STATUS)||console.error("Could not initialise shader\nVALIDATE_STATUS: "+k.getProgramParameter(q,k.VALIDATE_STATUS)+", gl error ["+k.getError()+"]");k.deleteShader(e);k.deleteShader(d);q.uniforms={};q.attributes={};var s,d=["viewMatrix","modelViewMatrix","projectionMatrix","normalMatrix","objectMatrix","cameraPosition","morphTargetInfluences"];c.useVertexTexture?d.push("boneTexture"):

+ 65 - 65
build/custom/ThreeWebGL.js

@@ -295,80 +295,80 @@ g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.image.__webglTe
 (l.height&l.height-1)===0;n=A(e.format);p=A(e.type);F(g.TEXTURE_CUBE_MAP,e,m);for(l=0;l<6;l++)g.texImage2D(g.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,n,n,p,k[l]);e.generateMipmaps&&m&&g.generateMipmap(g.TEXTURE_CUBE_MAP);e.needsUpdate=false;if(e.onUpdate)e.onUpdate()}else{g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.image.__webglTextureCube)}}else if(l instanceof THREE.WebGLRenderTargetCube){e=l;g.activeTexture(g.TEXTURE0+k);g.bindTexture(g.TEXTURE_CUBE_MAP,e.__webglTexture)}else E.setTexture(l,
 k)}else if(m==="tv"){if(e._array===void 0){e._array=[];m=0;for(n=e.texture.length;m<n;m++)e._array[m]=k+m}g.uniform1iv(l,e._array);m=0;for(n=e.texture.length;m<n;m++)(l=e.texture[m])&&E.setTexture(l,e._array[m])}}if((d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&i.cameraPosition!==null){b=a.matrixWorld.getPosition();g.uniform3f(i.cameraPosition,b.x,b.y,b.z)}(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||
 d.skinning)&&i.viewMatrix!==null&&g.uniformMatrix4fv(i.viewMatrix,false,a._viewMatrixArray)}if(d.skinning)if(hc&&f.useVertexTexture){if(i.boneTexture!==null){g.uniform1i(i.boneTexture,12);E.setTexture(f.boneTexture,12)}}else i.boneGlobalMatrices!==null&&g.uniformMatrix4fv(i.boneGlobalMatrices,false,f.boneMatrices);g.uniformMatrix4fv(i.modelViewMatrix,false,f._modelViewMatrix.elements);i.normalMatrix&&g.uniformMatrix3fv(i.normalMatrix,false,f._normalMatrix.elements);i.objectMatrix!==null&&g.uniformMatrix4fv(i.objectMatrix,
-false,f.matrixWorld.elements);return h}function p(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function v(a,b,c){if(Va!==a){a?g.enable(g.POLYGON_OFFSET_FILL):g.disable(g.POLYGON_OFFSET_FILL);Va=a}if(a&&(ob!==b||Lb!==c)){g.polygonOffset(b,c);ob=b;Lb=c}}function x(a,b){var c;a==="fragment"?c=g.createShader(g.FRAGMENT_SHADER):a==="vertex"&&(c=g.createShader(g.VERTEX_SHADER));g.shaderSource(c,b);g.compileShader(c);
+false,f.matrixWorld.elements);return h}function p(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function v(a,b,c){if(Va!==a){a?g.enable(g.POLYGON_OFFSET_FILL):g.disable(g.POLYGON_OFFSET_FILL);Va=a}if(a&&(wb!==b||Lb!==c)){g.polygonOffset(b,c);wb=b;Lb=c}}function x(a,b){var c;a==="fragment"?c=g.createShader(g.FRAGMENT_SHADER):a==="vertex"&&(c=g.createShader(g.VERTEX_SHADER));g.shaderSource(c,b);g.compileShader(c);
 if(!g.getShaderParameter(c,g.COMPILE_STATUS)){console.error(g.getShaderInfoLog(c));console.error(b);return null}return c}function F(a,b,c){if(c){g.texParameteri(a,g.TEXTURE_WRAP_S,A(b.wrapS));g.texParameteri(a,g.TEXTURE_WRAP_T,A(b.wrapT));g.texParameteri(a,g.TEXTURE_MAG_FILTER,A(b.magFilter));g.texParameteri(a,g.TEXTURE_MIN_FILTER,A(b.minFilter))}else{g.texParameteri(a,g.TEXTURE_WRAP_S,g.CLAMP_TO_EDGE);g.texParameteri(a,g.TEXTURE_WRAP_T,g.CLAMP_TO_EDGE);g.texParameteri(a,g.TEXTURE_MAG_FILTER,I(b.magFilter));
-g.texParameteri(a,g.TEXTURE_MIN_FILTER,I(b.minFilter))}xb&&g.texParameterf(a,xb.TEXTURE_MAX_ANISOTROPY_EXT,b.anisotropy)}function s(a,b){g.bindRenderbuffer(g.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_COMPONENT16,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,g.DEPTH_ATTACHMENT,g.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_STENCIL,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,
+g.texParameteri(a,g.TEXTURE_MIN_FILTER,I(b.minFilter))}Za&&g.texParameterf(a,Za.TEXTURE_MAX_ANISOTROPY_EXT,b.anisotropy)}function s(a,b){g.bindRenderbuffer(g.RENDERBUFFER,a);if(b.depthBuffer&&!b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_COMPONENT16,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,g.DEPTH_ATTACHMENT,g.RENDERBUFFER,a)}else if(b.depthBuffer&&b.stencilBuffer){g.renderbufferStorage(g.RENDERBUFFER,g.DEPTH_STENCIL,b.width,b.height);g.framebufferRenderbuffer(g.FRAMEBUFFER,
 g.DEPTH_STENCIL_ATTACHMENT,g.RENDERBUFFER,a)}else g.renderbufferStorage(g.RENDERBUFFER,g.RGBA4,b.width,b.height)}function I(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?g.NEAREST:g.LINEAR}function A(a){return a===THREE.RepeatWrapping?g.REPEAT:a===THREE.ClampToEdgeWrapping?g.CLAMP_TO_EDGE:a===THREE.MirroredRepeatWrapping?g.MIRRORED_REPEAT:a===THREE.NearestFilter?g.NEAREST:a===THREE.NearestMipMapNearestFilter?g.NEAREST_MIPMAP_NEAREST:a===
 THREE.NearestMipMapLinearFilter?g.NEAREST_MIPMAP_LINEAR:a===THREE.LinearFilter?g.LINEAR:a===THREE.LinearMipMapNearestFilter?g.LINEAR_MIPMAP_NEAREST:a===THREE.LinearMipMapLinearFilter?g.LINEAR_MIPMAP_LINEAR:a===THREE.UnsignedByteType?g.UNSIGNED_BYTE:a===THREE.UnsignedShort4444Type?g.UNSIGNED_SHORT_4_4_4_4:a===THREE.UnsignedShort5551Type?g.UNSIGNED_SHORT_5_5_5_1:a===THREE.UnsignedShort565Type?g.UNSIGNED_SHORT_5_6_5:a===THREE.ByteType?g.BYTE:a===THREE.ShortType?g.SHORT:a===THREE.UnsignedShortType?g.UNSIGNED_SHORT:
 a===THREE.IntType?g.INT:a===THREE.UnsignedIntType?g.UNSIGNED_INT:a===THREE.FloatType?g.FLOAT:a===THREE.AlphaFormat?g.ALPHA:a===THREE.RGBFormat?g.RGB:a===THREE.RGBAFormat?g.RGBA:a===THREE.LuminanceFormat?g.LUMINANCE:a===THREE.LuminanceAlphaFormat?g.LUMINANCE_ALPHA:a===THREE.AddEquation?g.FUNC_ADD:a===THREE.SubtractEquation?g.FUNC_SUBTRACT:a===THREE.ReverseSubtractEquation?g.FUNC_REVERSE_SUBTRACT:a===THREE.ZeroFactor?g.ZERO:a===THREE.OneFactor?g.ONE:a===THREE.SrcColorFactor?g.SRC_COLOR:a===THREE.OneMinusSrcColorFactor?
 g.ONE_MINUS_SRC_COLOR:a===THREE.SrcAlphaFactor?g.SRC_ALPHA:a===THREE.OneMinusSrcAlphaFactor?g.ONE_MINUS_SRC_ALPHA:a===THREE.DstAlphaFactor?g.DST_ALPHA:a===THREE.OneMinusDstAlphaFactor?g.ONE_MINUS_DST_ALPHA:a===THREE.DstColorFactor?g.DST_COLOR:a===THREE.OneMinusDstColorFactor?g.ONE_MINUS_DST_COLOR:a===THREE.SrcAlphaSaturateFactor?g.SRC_ALPHA_SATURATE:0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},N=a.canvas!==void 0?a.canvas:document.createElement("canvas"),D=a.precision!==void 0?
 a.precision:"highp",H=a.alpha!==void 0?a.alpha:true,G=a.premultipliedAlpha!==void 0?a.premultipliedAlpha:true,R=a.antialias!==void 0?a.antialias:false,U=a.stencil!==void 0?a.stencil:true,T=a.preserveDrawingBuffer!==void 0?a.preserveDrawingBuffer:false,z=a.clearColor!==void 0?new THREE.Color(a.clearColor):new THREE.Color(0),K=a.clearAlpha!==void 0?a.clearAlpha:0,V=a.maxLights!==void 0?a.maxLights:4;this.domElement=N;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=
 this.autoClearDepth=this.autoClearColor=this.autoClear=true;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=false;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=true;this.shadowMapCascade=this.shadowMapDebug=false;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=true;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};
-var E=this,$=[],fa=0,J=null,ra=null,S=-1,ba=null,aa=null,va=0,L=-1,qa=-1,xa=-1,Aa=-1,Pa=-1,ja=-1,Ba=-1,Qa=-1,Va=null,ob=null,Lb=null,wb=null,Ub=0,Mb=0,Nb=0,Ob=0,gc=0,xc=0,ic=new THREE.Frustum,Wb=new THREE.Matrix4,Vb=new THREE.Matrix4,pb=new THREE.Vector4,Ha=new THREE.Vector3,Wa=true,yc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},g,xb;try{if(!(g=
-N.getContext("experimental-webgl",{alpha:H,premultipliedAlpha:G,antialias:R,stencil:U,preserveDrawingBuffer:T})))throw"Error creating WebGL context.";}catch(Pc){console.error(Pc)}(a=g.getExtension("OES_texture_float"))||console.log("THREE.WebGLRenderer: Float textures not supported.");(xb=g.getExtension("EXT_texture_filter_anisotropic")||g.getExtension("MOZ_EXT_texture_filter_anisotropic")||g.getExtension("WEBKIT_EXT_texture_filter_anisotropic"))||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");
-g.clearColor(0,0,0,1);g.clearDepth(1);g.clearStencil(0);g.enable(g.DEPTH_TEST);g.depthFunc(g.LEQUAL);g.frontFace(g.CCW);g.cullFace(g.BACK);g.enable(g.CULL_FACE);g.enable(g.BLEND);g.blendEquation(g.FUNC_ADD);g.blendFunc(g.SRC_ALPHA,g.ONE_MINUS_SRC_ALPHA);g.clearColor(z.r,z.g,z.b,K);this.context=g;H=g.getParameter(g.MAX_VERTEX_TEXTURE_IMAGE_UNITS);g.getParameter(g.MAX_TEXTURE_SIZE);var Oc=g.getParameter(g.MAX_CUBE_MAP_TEXTURE_SIZE),Qc=xb?g.getParameter(xb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,jc=H>0,hc=
-jc&&a;this.getContext=function(){return g};this.supportsVertexTextures=function(){return jc};this.getMaxAnisotropy=function(){return Qc};this.setSize=function(a,b){N.width=a;N.height=b;this.setViewport(0,0,N.width,N.height)};this.setViewport=function(a,b,c,d){Ub=a;Mb=b;Nb=c;Ob=d;g.viewport(Ub,Mb,Nb,Ob)};this.setScissor=function(a,b,c,d){g.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?g.enable(g.SCISSOR_TEST):g.disable(g.SCISSOR_TEST)};this.setClearColorHex=function(a,b){z.setHex(a);K=b;g.clearColor(z.r,
-z.g,z.b,K)};this.setClearColor=function(a,b){z.copy(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.getClearColor=function(){return z};this.getClearAlpha=function(){return K};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|g.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|g.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|g.STENCIL_BUFFER_BIT;g.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=
-function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];g.deleteBuffer(c.__webglVertexBuffer);g.deleteBuffer(c.__webglNormalBuffer);g.deleteBuffer(c.__webglTangentBuffer);g.deleteBuffer(c.__webglColorBuffer);
-g.deleteBuffer(c.__webglUVBuffer);g.deleteBuffer(c.__webglUV2Buffer);g.deleteBuffer(c.__webglSkinVertexABuffer);g.deleteBuffer(c.__webglSkinVertexBBuffer);g.deleteBuffer(c.__webglSkinIndicesBuffer);g.deleteBuffer(c.__webglSkinWeightsBuffer);g.deleteBuffer(c.__webglFaceBuffer);g.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d<e;d++)g.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=0;for(e=c.numMorphNormals;d<e;d++)g.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=
-void 0;for(d in c.__webglCustomAttributesList)g.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}E.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof THREE.Line){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);
-g.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;g.deleteTexture(a.__webglTexture);E.info.memory.textures--}};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){g.deleteTexture(a.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){g.deleteFramebuffer(a.__webglFramebuffer[b]);g.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{g.deleteFramebuffer(a.__webglFramebuffer);
-g.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=$.length;a<c;a++){d=$[a];if(d.program===b){d.usedTimes--;d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=$.length;a<c;a++){d=$[a];d.program!==b&&e.push(d)}$=e;g.deleteProgram(b);E.info.memory.programs--}}};this.updateShadowMap=function(a,b){J=null;S=ba=Qa=Ba=xa=-1;Wa=true;qa=L=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,
-b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=g.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=g.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=g.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=g.createBuffer();if(a.hasPositions){g.bindBuffer(g.ARRAY_BUFFER,a.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,a.positionArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.position);g.vertexAttribPointer(b.attributes.position,
-3,g.FLOAT,false,0,0)}if(a.hasNormals){g.bindBuffer(g.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,h,i,j,k,m,l,n,o,q=a.count*3;for(o=0;o<q;o=o+9){n=a.normalArray;d=n[o];e=n[o+1];f=n[o+2];h=n[o+3];j=n[o+4];m=n[o+5];i=n[o+6];k=n[o+7];l=n[o+8];d=(d+h+i)/3;e=(e+j+k)/3;f=(f+m+l)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+7]=e;n[o+8]=f}}g.bufferData(g.ARRAY_BUFFER,a.normalArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.normal);g.vertexAttribPointer(b.attributes.normal,
-3,g.FLOAT,false,0,0)}if(a.hasUvs&&c.map){g.bindBuffer(g.ARRAY_BUFFER,a.__webglUvBuffer);g.bufferData(g.ARRAY_BUFFER,a.uvArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.uv);g.vertexAttribPointer(b.attributes.uv,2,g.FLOAT,false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){g.bindBuffer(g.ARRAY_BUFFER,a.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,a.colorArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.color);g.vertexAttribPointer(b.attributes.color,3,g.FLOAT,false,
-0,0)}g.drawArrays(g.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=r(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==ba){ba=d;b=true}if(f instanceof THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var h=f[d].index;if(b){var i=e.attributes.position,j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.position,j,g.FLOAT,false,0,h*j*4);i=e.attributes.normal;if(a.normal>=
-0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.normal,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.uv;if(a.uv>=0&&i)if(i.buffer){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.uv,j,g.FLOAT,false,0,h*j*4);g.enableVertexAttribArray(a.uv)}else g.disableVertexAttribArray(a.uv);i=e.attributes.color;if(a.color>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.color,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.tangent;if(a.tangent>=
-0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.tangent,j,g.FLOAT,false,0,h*j*4)}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}g.drawElements(g.TRIANGLES,f[d].count,g.UNSIGNED_SHORT,f[d].start*2);E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+f[d].count;E.info.render.faces=E.info.render.faces+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var h,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+
-c.id*2+(d.wireframe?1:0);if(c!==ba){ba=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(b.position,3,g.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);g.vertexAttribPointer(c.position,3,g.FLOAT,false,0,0)}else if(c.position>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(c.position,
-3,g.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var k=0;i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;k<d.numSupportedMorphTargets&&k<i.length;){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[i[k]]);g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[i[k]]);g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[i[k]];k++}}else{i=[];h=f.morphTargetInfluences;
-var m,l=h.length;for(m=0;m<l;m++){k=h[m];k>0&&i.push([m,k])}if(i.length>d.numSupportedMorphTargets){i.sort(j);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(j):i.length===0&&i.push([0,0]);for(k=0;k<d.numSupportedMorphTargets;){if(i[k]){m=i[k][0];g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[m]);g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[m]);g.vertexAttribPointer(c["morphNormal"+
-k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[m]}else{g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);d.morphNormals&&g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0);f.__webglMorphTargetInfluences[k]=0}k++}}d.program.uniforms.morphTargetInfluences!==null&&g.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){h=0;for(i=e.__webglCustomAttributesList.length;h<i;h++){c=e.__webglCustomAttributesList[h];
-if(b[c.buffer.belongsToAttribute]>=0){g.bindBuffer(g.ARRAY_BUFFER,c.buffer);g.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,g.FLOAT,false,0,0)}}}if(b.color>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglColorBuffer);g.vertexAttribPointer(b.color,3,g.FLOAT,false,0,0)}if(b.normal>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglNormalBuffer);g.vertexAttribPointer(b.normal,3,g.FLOAT,false,0,0)}if(b.tangent>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglTangentBuffer);g.vertexAttribPointer(b.tangent,4,g.FLOAT,
-false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUVBuffer);g.vertexAttribPointer(b.uv,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv)}else g.disableVertexAttribArray(b.uv);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!==wb){g.lineWidth(d);
-wb=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)}E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+e.__webglFaceCount;E.info.render.faces=E.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!==wb){g.lineWidth(d);wb=d}g.drawArrays(f,0,e.__webglLineCount);E.info.render.calls++}else if(f instanceof THREE.ParticleSystem){g.drawArrays(g.POINTS,0,e.__webglParticleCount);E.info.render.calls++;E.info.render.points=E.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){g.drawArrays(g.TRIANGLE_STRIP,0,e.__webglVertexCount);E.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,j,m,n=a.__lights,o=a.fog;S=-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);E.info.render.calls=0;E.info.render.vertices=0;E.info.render.faces=0;E.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,s=void 0,s=s=void 0,s=r.material;if(s instanceof THREE.MeshFaceMaterial){s=
-u.materialIndex;if(s>=0){s=r.geometry.materials[s];if(s.transparent){q.transparent=s;q.opaque=null}else{q.opaque=s;q.transparent=null}}}else if(s)if(s.transparent){q.transparent=s;q.opaque=null}else{q.opaque=s;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);v(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);ba=-1;E.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,g,ic):e.render(function(a){E.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,s=void 0,v=void 0,x=void 0,A=void 0,z=void 0,D=void 0,F={},I=p.morphTargets.length,J=p.morphNormals.length;p.geometryGroups={};r=0;for(s=p.faces.length;r<s;r++){v=p.faces[r];x=v.materialIndex;z=x!==void 0?x:-1;F[z]===void 0&&(F[z]={hash:z,counter:0});D=F[z].hash+
-"_"+F[z].counter;p.geometryGroups[D]===void 0&&(p.geometryGroups[D]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:I,numMorphNormals:J});A=v instanceof THREE.Face3?3:4;if(p.geometryGroups[D].vertices+A>65535){F[z].counter=F[z].counter+1;D=F[z].hash+"_"+F[z].counter;p.geometryGroups[D]===void 0&&(p.geometryGroups[D]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:I,numMorphNormals:J})}v instanceof THREE.Face3?p.geometryGroups[D].faces3.push(r):p.geometryGroups[D].faces4.push(r);
-p.geometryGroups[D].vertices=p.geometryGroups[D].vertices+A}p.geometryGroupsList=[];var K=void 0;for(K in p.geometryGroups){p.geometryGroups[K].id=va++;p.geometryGroupsList.push(p.geometryGroups[K])}}for(j in k.geometryGroups){l=k.geometryGroups[j];if(!l.__webglVertexBuffer){var H=l;H.__webglVertexBuffer=g.createBuffer();H.__webglNormalBuffer=g.createBuffer();H.__webglTangentBuffer=g.createBuffer();H.__webglColorBuffer=g.createBuffer();H.__webglUVBuffer=g.createBuffer();H.__webglUV2Buffer=g.createBuffer();
-H.__webglSkinVertexABuffer=g.createBuffer();H.__webglSkinVertexBBuffer=g.createBuffer();H.__webglSkinIndicesBuffer=g.createBuffer();H.__webglSkinWeightsBuffer=g.createBuffer();H.__webglFaceBuffer=g.createBuffer();H.__webglLineBuffer=g.createBuffer();var L=void 0,N=void 0;if(H.numMorphTargets){H.__webglMorphTargetsBuffers=[];L=0;for(N=H.numMorphTargets;L<N;L++)H.__webglMorphTargetsBuffers.push(g.createBuffer())}if(H.numMorphNormals){H.__webglMorphNormalsBuffers=[];L=0;for(N=H.numMorphNormals;L<N;L++)H.__webglMorphNormalsBuffers.push(g.createBuffer())}E.info.memory.geometries++;
-var G=l,S=h,T=S.geometry,U=G.faces3,V=G.faces4,R=U.length*3+V.length*4,aa=U.length*1+V.length*2,ba=U.length*3+V.length*4,$=c(S,G),fa=f($),qa=d($),xa=$.vertexColors?$.vertexColors:false;G.__vertexArray=new Float32Array(R*3);if(qa)G.__normalArray=new Float32Array(R*3);if(T.hasTangents)G.__tangentArray=new Float32Array(R*4);if(xa)G.__colorArray=new Float32Array(R*3);if(fa){if(T.faceUvs.length>0||T.faceVertexUvs.length>0)G.__uvArray=new Float32Array(R*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>
-1)G.__uv2Array=new Float32Array(R*2)}if(S.geometry.skinWeights.length&&S.geometry.skinIndices.length){G.__skinVertexAArray=new Float32Array(R*4);G.__skinVertexBArray=new Float32Array(R*4);G.__skinIndexArray=new Float32Array(R*4);G.__skinWeightArray=new Float32Array(R*4)}G.__faceArray=new Uint16Array(aa*3);G.__lineArray=new Uint16Array(ba*2);var ra=void 0,Lb=void 0;if(G.numMorphTargets){G.__morphTargetsArrays=[];ra=0;for(Lb=G.numMorphTargets;ra<Lb;ra++)G.__morphTargetsArrays.push(new Float32Array(R*
-3))}if(G.numMorphNormals){G.__morphNormalsArrays=[];ra=0;for(Lb=G.numMorphNormals;ra<Lb;ra++)G.__morphNormalsArrays.push(new Float32Array(R*3))}G.__webglFaceCount=aa*3;G.__webglLineCount=ba*2;if($.attributes){if(G.__webglCustomAttributesList===void 0)G.__webglCustomAttributesList=[];var Ba=void 0;for(Ba in $.attributes){var Aa=$.attributes[Ba],ja={},wb;for(wb in Aa)ja[wb]=Aa[wb];if(!ja.__webglInitialized||ja.createUniqueBuffers){ja.__webglInitialized=true;var Ha=1;ja.type==="v2"?Ha=2:ja.type==="v3"?
-Ha=3:ja.type==="v4"?Ha=4:ja.type==="c"&&(Ha=3);ja.size=Ha;ja.array=new Float32Array(R*Ha);ja.buffer=g.createBuffer();ja.buffer.belongsToAttribute=Ba;Aa.needsUpdate=true;ja.__original=Aa}G.__webglCustomAttributesList.push(ja)}}G.__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 Ub=k,Pa=void 0,Qa=void 0,
-Va=void 0;for(Pa in Ub.attributes){Va=Pa==="index"?g.ELEMENT_ARRAY_BUFFER:g.ARRAY_BUFFER;Qa=Ub.attributes[Pa];Qa.buffer=g.createBuffer();g.bindBuffer(Va,Qa.buffer);g.bufferData(Va,Qa.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();E.info.memory.geometries++;var Wa=k,ob=Wa.vertices.length;Wa.__vertexArray=new Float32Array(ob*3);Wa.__colorArray=new Float32Array(ob*
-3);Wa.__webglVertexCount=ob;k.verticesNeedUpdate=true;k.colorsNeedUpdate=true}}else if(h instanceof THREE.Line){k=h.geometry;if(!k.__webglVertexBuffer){var xb=k;xb.__webglVertexBuffer=g.createBuffer();xb.__webglColorBuffer=g.createBuffer();E.info.memory.geometries++;var kc=k,Wb=h,Mb=kc.vertices.length;kc.__vertexArray=new Float32Array(Mb*3);kc.__colorArray=new Float32Array(Mb*3);kc.__webglLineCount=Mb;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();E.info.geometries++;var Xb=k,hc=h,Nb=Xb.vertices.length;Xb.__vertexArray=new Float32Array(Nb*3);Xb.__colorArray=new Float32Array(Nb*3);Xb.__sortArray=[];Xb.__webglParticleCount=Nb;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],zc=a;Ra instanceof THREE.Mesh||Ra instanceof THREE.ParticleSystem||Ra instanceof THREE.Ribbon||Ra instanceof THREE.Line?u(zc.__webglObjects,Ra):Ra instanceof THREE.Sprite?o(zc.__webglSprites,Ra):Ra instanceof THREE.LensFlare?o(zc.__webglFlares,Ra):(Ra instanceof THREE.ImmediateRenderObject||Ra.immediateRenderCallback)&&u(zc.__webglObjectsImmediate,Ra);Ra.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var Ob=0,ic=a.__webglObjects.length;Ob<ic;Ob++){var Xa=a.__webglObjects[Ob].object,
-W=Xa.geometry,lc=void 0,Yb=void 0,Ka=void 0;if(Xa instanceof THREE.Mesh)if(W instanceof THREE.BufferGeometry){if(W.verticesNeedUpdate||W.elementsNeedUpdate||W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate){var qb=W,Zb=g.DYNAMIC_DRAW,jc=!W.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}}W.verticesNeedUpdate=false;W.elementsNeedUpdate=false;W.uvsNeedUpdate=false;W.normalsNeedUpdate=false;W.colorsNeedUpdate=false;W.tangentsNeedUpdate=false}else{for(var Xc=0,xc=W.geometryGroupsList.length;Xc<xc;Xc++){lc=W.geometryGroupsList[Xc];Ka=c(Xa,lc);Yb=Ka.attributes&&n(Ka);if(W.verticesNeedUpdate||W.morphTargetsNeedUpdate||W.elementsNeedUpdate||
-W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate||Yb){var Y=lc,yc=Xa,Ma=g.DYNAMIC_DRAW,Oc=!W.dynamic,Pb=Ka;if(Y.__inittedArrays){var fd=d(Pb),Yc=Pb.vertexColors?Pb.vertexColors:false,gd=f(Pb),Ac=fd===THREE.SmoothShading,y=void 0,M=void 0,Ua=void 0,C=void 0,ac=void 0,yb=void 0,Ya=void 0,Bc=void 0,rb=void 0,bc=void 0,cc=void 0,O=void 0,P=void 0,Q=void 0,ga=void 0,Za=void 0,$a=void 0,ab=void 0,mc=void 0,bb=void 0,cb=void 0,db=void 0,nc=void 0,eb=void 0,fb=void 0,gb=void 0,
-oc=void 0,hb=void 0,ib=void 0,jb=void 0,pc=void 0,kb=void 0,lb=void 0,mb=void 0,qc=void 0,zb=void 0,Ab=void 0,Bb=void 0,Cc=void 0,Cb=void 0,Db=void 0,Eb=void 0,Dc=void 0,ca=void 0,hd=void 0,Fb=void 0,dc=void 0,ec=void 0,Ca=void 0,id=void 0,ya=void 0,za=void 0,Gb=void 0,sb=void 0,sa=0,wa=0,tb=0,ub=0,Sa=0,Ga=0,ha=0,Ia=0,ta=0,B=0,X=0,w=0,Na=void 0,Da=Y.__vertexArray,rc=Y.__uvArray,sc=Y.__uv2Array,Ta=Y.__normalArray,ka=Y.__tangentArray,Ea=Y.__colorArray,la=Y.__skinVertexAArray,ma=Y.__skinVertexBArray,
-na=Y.__skinIndexArray,oa=Y.__skinWeightArray,Zc=Y.__morphTargetsArrays,$c=Y.__morphNormalsArrays,ad=Y.__webglCustomAttributesList,t=void 0,nb=Y.__faceArray,Oa=Y.__lineArray,Ja=yc.geometry,Pc=Ja.elementsNeedUpdate,jd=Ja.uvsNeedUpdate,Qc=Ja.normalsNeedUpdate,qd=Ja.tangentsNeedUpdate,rd=Ja.colorsNeedUpdate,sd=Ja.morphTargetsNeedUpdate,Qb=Ja.vertices,da=Y.faces3,ea=Y.faces4,ua=Ja.faces,bd=Ja.faceVertexUvs[0],cd=Ja.faceVertexUvs[1],Rb=Ja.skinVerticesA,Sb=Ja.skinVerticesB,Tb=Ja.skinIndices,Hb=Ja.skinWeights,
+var E=this,$=[],fa=0,J=null,ra=null,S=-1,ba=null,aa=null,va=0,L=-1,qa=-1,xa=-1,Aa=-1,Pa=-1,ja=-1,Ba=-1,Qa=-1,Va=null,wb=null,Lb=null,xb=null,Ub=0,Mb=0,Nb=0,Ob=0,gc=0,xc=0,ic=new THREE.Frustum,Wb=new THREE.Matrix4,Vb=new THREE.Matrix4,pb=new THREE.Vector4,Ha=new THREE.Vector3,Wa=true,yc={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],angles:[],exponents:[]}},g,Za;try{if(!(g=
+N.getContext("experimental-webgl",{alpha:H,premultipliedAlpha:G,antialias:R,stencil:U,preserveDrawingBuffer:T})))throw"Error creating WebGL context.";}catch(Pc){console.error(Pc)}a=g.getExtension("OES_texture_float");H=g.getExtension("OES_standard_derivatives");Za=g.getExtension("EXT_texture_filter_anisotropic")||g.getExtension("MOZ_EXT_texture_filter_anisotropic")||g.getExtension("WEBKIT_EXT_texture_filter_anisotropic");a||console.log("THREE.WebGLRenderer: Float textures not supported.");H||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
+Za||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");g.clearColor(0,0,0,1);g.clearDepth(1);g.clearStencil(0);g.enable(g.DEPTH_TEST);g.depthFunc(g.LEQUAL);g.frontFace(g.CCW);g.cullFace(g.BACK);g.enable(g.CULL_FACE);g.enable(g.BLEND);g.blendEquation(g.FUNC_ADD);g.blendFunc(g.SRC_ALPHA,g.ONE_MINUS_SRC_ALPHA);g.clearColor(z.r,z.g,z.b,K);this.context=g;H=g.getParameter(g.MAX_VERTEX_TEXTURE_IMAGE_UNITS);g.getParameter(g.MAX_TEXTURE_SIZE);var Oc=g.getParameter(g.MAX_CUBE_MAP_TEXTURE_SIZE),
+Qc=Za?g.getParameter(Za.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,jc=H>0,hc=jc&&a;this.getContext=function(){return g};this.supportsVertexTextures=function(){return jc};this.getMaxAnisotropy=function(){return Qc};this.setSize=function(a,b){N.width=a;N.height=b;this.setViewport(0,0,N.width,N.height)};this.setViewport=function(a,b,c,d){Ub=a;Mb=b;Nb=c;Ob=d;g.viewport(Ub,Mb,Nb,Ob)};this.setScissor=function(a,b,c,d){g.scissor(a,b,c,d)};this.enableScissorTest=function(a){a?g.enable(g.SCISSOR_TEST):g.disable(g.SCISSOR_TEST)};
+this.setClearColorHex=function(a,b){z.setHex(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.setClearColor=function(a,b){z.copy(a);K=b;g.clearColor(z.r,z.g,z.b,K)};this.getClearColor=function(){return z};this.getClearAlpha=function(){return K};this.clear=function(a,b,c){var d=0;if(a===void 0||a)d=d|g.COLOR_BUFFER_BIT;if(b===void 0||b)d=d|g.DEPTH_BUFFER_BIT;if(c===void 0||c)d=d|g.STENCIL_BUFFER_BIT;g.clear(d)};this.clearTarget=function(a,b,c,d){this.setRenderTarget(a);this.clear(b,c,d)};this.addPostPlugin=
+function(a){a.init(this);this.renderPluginsPost.push(a)};this.addPrePlugin=function(a){a.init(this);this.renderPluginsPre.push(a)};this.deallocateObject=function(a){if(a.__webglInit){a.__webglInit=false;delete a._modelViewMatrix;delete a._normalMatrix;delete a._normalMatrixArray;delete a._modelViewMatrixArray;delete a._objectMatrixArray;if(a instanceof THREE.Mesh)for(var b in a.geometry.geometryGroups){var c=a.geometry.geometryGroups[b];g.deleteBuffer(c.__webglVertexBuffer);g.deleteBuffer(c.__webglNormalBuffer);
+g.deleteBuffer(c.__webglTangentBuffer);g.deleteBuffer(c.__webglColorBuffer);g.deleteBuffer(c.__webglUVBuffer);g.deleteBuffer(c.__webglUV2Buffer);g.deleteBuffer(c.__webglSkinVertexABuffer);g.deleteBuffer(c.__webglSkinVertexBBuffer);g.deleteBuffer(c.__webglSkinIndicesBuffer);g.deleteBuffer(c.__webglSkinWeightsBuffer);g.deleteBuffer(c.__webglFaceBuffer);g.deleteBuffer(c.__webglLineBuffer);var d=void 0,e=void 0;if(c.numMorphTargets){d=0;for(e=c.numMorphTargets;d<e;d++)g.deleteBuffer(c.__webglMorphTargetsBuffers[d])}if(c.numMorphNormals){d=
+0;for(e=c.numMorphNormals;d<e;d++)g.deleteBuffer(c.__webglMorphNormalsBuffers[d])}if(c.__webglCustomAttributesList){d=void 0;for(d in c.__webglCustomAttributesList)g.deleteBuffer(c.__webglCustomAttributesList[d].buffer)}E.info.memory.geometries--}else if(a instanceof THREE.Ribbon){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}else if(a instanceof THREE.Line){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);
+E.info.memory.geometries--}else if(a instanceof THREE.ParticleSystem){a=a.geometry;g.deleteBuffer(a.__webglVertexBuffer);g.deleteBuffer(a.__webglColorBuffer);E.info.memory.geometries--}}};this.deallocateTexture=function(a){if(a.__webglInit){a.__webglInit=false;g.deleteTexture(a.__webglTexture);E.info.memory.textures--}};this.deallocateRenderTarget=function(a){if(a&&a.__webglTexture){g.deleteTexture(a.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(var b=0;b<6;b++){g.deleteFramebuffer(a.__webglFramebuffer[b]);
+g.deleteRenderbuffer(a.__webglRenderbuffer[b])}else{g.deleteFramebuffer(a.__webglFramebuffer);g.deleteRenderbuffer(a.__webglRenderbuffer)}}};this.deallocateMaterial=function(a){var b=a.program;if(b){a.program=void 0;var c,d,e=false,a=0;for(c=$.length;a<c;a++){d=$[a];if(d.program===b){d.usedTimes--;d.usedTimes===0&&(e=true);break}}if(e){e=[];a=0;for(c=$.length;a<c;a++){d=$[a];d.program!==b&&e.push(d)}$=e;g.deleteProgram(b);E.info.memory.programs--}}};this.updateShadowMap=function(a,b){J=null;S=ba=
+Qa=Ba=xa=-1;Wa=true;qa=L=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){if(a.hasPositions&&!a.__webglVertexBuffer)a.__webglVertexBuffer=g.createBuffer();if(a.hasNormals&&!a.__webglNormalBuffer)a.__webglNormalBuffer=g.createBuffer();if(a.hasUvs&&!a.__webglUvBuffer)a.__webglUvBuffer=g.createBuffer();if(a.hasColors&&!a.__webglColorBuffer)a.__webglColorBuffer=g.createBuffer();if(a.hasPositions){g.bindBuffer(g.ARRAY_BUFFER,a.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,
+a.positionArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.position);g.vertexAttribPointer(b.attributes.position,3,g.FLOAT,false,0,0)}if(a.hasNormals){g.bindBuffer(g.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,h,i,j,k,m,l,n,o,q=a.count*3;for(o=0;o<q;o=o+9){n=a.normalArray;d=n[o];e=n[o+1];f=n[o+2];h=n[o+3];j=n[o+4];m=n[o+5];i=n[o+6];k=n[o+7];l=n[o+8];d=(d+h+i)/3;e=(e+j+k)/3;f=(f+m+l)/3;n[o]=d;n[o+1]=e;n[o+2]=f;n[o+3]=d;n[o+4]=e;n[o+5]=f;n[o+6]=d;n[o+
+7]=e;n[o+8]=f}}g.bufferData(g.ARRAY_BUFFER,a.normalArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.normal);g.vertexAttribPointer(b.attributes.normal,3,g.FLOAT,false,0,0)}if(a.hasUvs&&c.map){g.bindBuffer(g.ARRAY_BUFFER,a.__webglUvBuffer);g.bufferData(g.ARRAY_BUFFER,a.uvArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.uv);g.vertexAttribPointer(b.attributes.uv,2,g.FLOAT,false,0,0)}if(a.hasColors&&c.vertexColors!==THREE.NoColors){g.bindBuffer(g.ARRAY_BUFFER,a.__webglColorBuffer);
+g.bufferData(g.ARRAY_BUFFER,a.colorArray,g.DYNAMIC_DRAW);g.enableVertexAttribArray(b.attributes.color);g.vertexAttribPointer(b.attributes.color,3,g.FLOAT,false,0,0)}g.drawArrays(g.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(d.visible!==false){c=r(a,b,c,d,f);a=c.attributes;b=false;d=e.id*16777215+c.id*2+(d.wireframe?1:0);if(d!==ba){ba=d;b=true}if(f instanceof THREE.Mesh){f=e.offsets;f.length>1&&(b=true);d=0;for(c=f.length;d<c;++d){var h=f[d].index;if(b){var i=e.attributes.position,
+j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.position,j,g.FLOAT,false,0,h*j*4);i=e.attributes.normal;if(a.normal>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.normal,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.uv;if(a.uv>=0&&i)if(i.buffer){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.uv,j,g.FLOAT,false,0,h*j*4);g.enableVertexAttribArray(a.uv)}else g.disableVertexAttribArray(a.uv);i=e.attributes.color;if(a.color>=
+0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.color,j,g.FLOAT,false,0,h*j*4)}i=e.attributes.tangent;if(a.tangent>=0&&i){j=i.itemSize;g.bindBuffer(g.ARRAY_BUFFER,i.buffer);g.vertexAttribPointer(a.tangent,j,g.FLOAT,false,0,h*j*4)}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,e.attributes.index.buffer)}g.drawElements(g.TRIANGLES,f[d].count,g.UNSIGNED_SHORT,f[d].start*2);E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+f[d].count;E.info.render.faces=E.info.render.faces+
+f[d].count/3}}}};this.renderBuffer=function(a,b,c,d,e,f){if(d.visible!==false){var h,i,c=r(a,b,c,d,f),b=c.attributes,a=false,c=e.id*16777215+c.id*2+(d.wireframe?1:0);if(c!==ba){ba=c;a=true}if(!d.morphTargets&&b.position>=0){if(a){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(b.position,3,g.FLOAT,false,0,0)}}else if(f.morphTargetBase){c=d.program.attributes;if(f.morphTargetBase!==-1){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[f.morphTargetBase]);g.vertexAttribPointer(c.position,
+3,g.FLOAT,false,0,0)}else if(c.position>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglVertexBuffer);g.vertexAttribPointer(c.position,3,g.FLOAT,false,0,0)}if(f.morphTargetForcedOrder.length){var k=0;i=f.morphTargetForcedOrder;for(h=f.morphTargetInfluences;k<d.numSupportedMorphTargets&&k<i.length;){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[i[k]]);g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[i[k]]);
+g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[i[k]];k++}}else{i=[];h=f.morphTargetInfluences;var m,l=h.length;for(m=0;m<l;m++){k=h[m];k>0&&i.push([m,k])}if(i.length>d.numSupportedMorphTargets){i.sort(j);i.length=d.numSupportedMorphTargets}else i.length>d.numSupportedMorphNormals?i.sort(j):i.length===0&&i.push([0,0]);for(k=0;k<d.numSupportedMorphTargets;){if(i[k]){m=i[k][0];g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[m]);g.vertexAttribPointer(c["morphTarget"+
+k],3,g.FLOAT,false,0,0);if(d.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,e.__webglMorphNormalsBuffers[m]);g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0)}f.__webglMorphTargetInfluences[k]=h[m]}else{g.vertexAttribPointer(c["morphTarget"+k],3,g.FLOAT,false,0,0);d.morphNormals&&g.vertexAttribPointer(c["morphNormal"+k],3,g.FLOAT,false,0,0);f.__webglMorphTargetInfluences[k]=0}k++}}d.program.uniforms.morphTargetInfluences!==null&&g.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList){h=
+0;for(i=e.__webglCustomAttributesList.length;h<i;h++){c=e.__webglCustomAttributesList[h];if(b[c.buffer.belongsToAttribute]>=0){g.bindBuffer(g.ARRAY_BUFFER,c.buffer);g.vertexAttribPointer(b[c.buffer.belongsToAttribute],c.size,g.FLOAT,false,0,0)}}}if(b.color>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglColorBuffer);g.vertexAttribPointer(b.color,3,g.FLOAT,false,0,0)}if(b.normal>=0){g.bindBuffer(g.ARRAY_BUFFER,e.__webglNormalBuffer);g.vertexAttribPointer(b.normal,3,g.FLOAT,false,0,0)}if(b.tangent>=0){g.bindBuffer(g.ARRAY_BUFFER,
+e.__webglTangentBuffer);g.vertexAttribPointer(b.tangent,4,g.FLOAT,false,0,0)}if(b.uv>=0)if(e.__webglUVBuffer){g.bindBuffer(g.ARRAY_BUFFER,e.__webglUVBuffer);g.vertexAttribPointer(b.uv,2,g.FLOAT,false,0,0);g.enableVertexAttribArray(b.uv)}else g.disableVertexAttribArray(b.uv);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!==xb){g.lineWidth(d);xb=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)}E.info.render.calls++;E.info.render.vertices=E.info.render.vertices+e.__webglFaceCount;E.info.render.faces=E.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!==xb){g.lineWidth(d);xb=d}g.drawArrays(f,0,e.__webglLineCount);E.info.render.calls++}else if(f instanceof THREE.ParticleSystem){g.drawArrays(g.POINTS,0,e.__webglParticleCount);E.info.render.calls++;E.info.render.points=E.info.render.points+e.__webglParticleCount}else if(f instanceof THREE.Ribbon){g.drawArrays(g.TRIANGLE_STRIP,0,e.__webglVertexCount);E.info.render.calls++}}};this.render=function(a,b,c,d){var e,f,j,m,n=a.__lights,
+o=a.fog;S=-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);E.info.render.calls=0;E.info.render.vertices=0;E.info.render.faces=0;E.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,s=void 0,s=s=void 0,s=r.material;if(s instanceof THREE.MeshFaceMaterial){s=u.materialIndex;if(s>=0){s=r.geometry.materials[s];if(s.transparent){q.transparent=s;q.opaque=null}else{q.opaque=s;q.transparent=null}}}else if(s)if(s.transparent){q.transparent=s;q.opaque=null}else{q.opaque=s;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);v(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);ba=-1;E.setObjectFaces(e);e.immediateRenderCallback?e.immediateRenderCallback(f,g,ic):e.render(function(a){E.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,s=void 0,v=void 0,x=void 0,A=void 0,z=void 0,D=void 0,F={},I=p.morphTargets.length,J=p.morphNormals.length;p.geometryGroups={};r=0;for(s=p.faces.length;r<
+s;r++){v=p.faces[r];x=v.materialIndex;z=x!==void 0?x:-1;F[z]===void 0&&(F[z]={hash:z,counter:0});D=F[z].hash+"_"+F[z].counter;p.geometryGroups[D]===void 0&&(p.geometryGroups[D]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:I,numMorphNormals:J});A=v instanceof THREE.Face3?3:4;if(p.geometryGroups[D].vertices+A>65535){F[z].counter=F[z].counter+1;D=F[z].hash+"_"+F[z].counter;p.geometryGroups[D]===void 0&&(p.geometryGroups[D]={faces3:[],faces4:[],materialIndex:x,vertices:0,numMorphTargets:I,
+numMorphNormals:J})}v instanceof THREE.Face3?p.geometryGroups[D].faces3.push(r):p.geometryGroups[D].faces4.push(r);p.geometryGroups[D].vertices=p.geometryGroups[D].vertices+A}p.geometryGroupsList=[];var K=void 0;for(K in p.geometryGroups){p.geometryGroups[K].id=va++;p.geometryGroupsList.push(p.geometryGroups[K])}}for(j in k.geometryGroups){l=k.geometryGroups[j];if(!l.__webglVertexBuffer){var H=l;H.__webglVertexBuffer=g.createBuffer();H.__webglNormalBuffer=g.createBuffer();H.__webglTangentBuffer=g.createBuffer();
+H.__webglColorBuffer=g.createBuffer();H.__webglUVBuffer=g.createBuffer();H.__webglUV2Buffer=g.createBuffer();H.__webglSkinVertexABuffer=g.createBuffer();H.__webglSkinVertexBBuffer=g.createBuffer();H.__webglSkinIndicesBuffer=g.createBuffer();H.__webglSkinWeightsBuffer=g.createBuffer();H.__webglFaceBuffer=g.createBuffer();H.__webglLineBuffer=g.createBuffer();var L=void 0,N=void 0;if(H.numMorphTargets){H.__webglMorphTargetsBuffers=[];L=0;for(N=H.numMorphTargets;L<N;L++)H.__webglMorphTargetsBuffers.push(g.createBuffer())}if(H.numMorphNormals){H.__webglMorphNormalsBuffers=
+[];L=0;for(N=H.numMorphNormals;L<N;L++)H.__webglMorphNormalsBuffers.push(g.createBuffer())}E.info.memory.geometries++;var G=l,S=h,T=S.geometry,U=G.faces3,V=G.faces4,R=U.length*3+V.length*4,aa=U.length*1+V.length*2,ba=U.length*3+V.length*4,$=c(S,G),fa=f($),qa=d($),xa=$.vertexColors?$.vertexColors:false;G.__vertexArray=new Float32Array(R*3);if(qa)G.__normalArray=new Float32Array(R*3);if(T.hasTangents)G.__tangentArray=new Float32Array(R*4);if(xa)G.__colorArray=new Float32Array(R*3);if(fa){if(T.faceUvs.length>
+0||T.faceVertexUvs.length>0)G.__uvArray=new Float32Array(R*2);if(T.faceUvs.length>1||T.faceVertexUvs.length>1)G.__uv2Array=new Float32Array(R*2)}if(S.geometry.skinWeights.length&&S.geometry.skinIndices.length){G.__skinVertexAArray=new Float32Array(R*4);G.__skinVertexBArray=new Float32Array(R*4);G.__skinIndexArray=new Float32Array(R*4);G.__skinWeightArray=new Float32Array(R*4)}G.__faceArray=new Uint16Array(aa*3);G.__lineArray=new Uint16Array(ba*2);var ra=void 0,Lb=void 0;if(G.numMorphTargets){G.__morphTargetsArrays=
+[];ra=0;for(Lb=G.numMorphTargets;ra<Lb;ra++)G.__morphTargetsArrays.push(new Float32Array(R*3))}if(G.numMorphNormals){G.__morphNormalsArrays=[];ra=0;for(Lb=G.numMorphNormals;ra<Lb;ra++)G.__morphNormalsArrays.push(new Float32Array(R*3))}G.__webglFaceCount=aa*3;G.__webglLineCount=ba*2;if($.attributes){if(G.__webglCustomAttributesList===void 0)G.__webglCustomAttributesList=[];var Ba=void 0;for(Ba in $.attributes){var Aa=$.attributes[Ba],ja={},xb;for(xb in Aa)ja[xb]=Aa[xb];if(!ja.__webglInitialized||ja.createUniqueBuffers){ja.__webglInitialized=
+true;var Ha=1;ja.type==="v2"?Ha=2:ja.type==="v3"?Ha=3:ja.type==="v4"?Ha=4:ja.type==="c"&&(Ha=3);ja.size=Ha;ja.array=new Float32Array(R*Ha);ja.buffer=g.createBuffer();ja.buffer.belongsToAttribute=Ba;Aa.needsUpdate=true;ja.__original=Aa}G.__webglCustomAttributesList.push(ja)}}G.__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 Ub=
+k,Pa=void 0,Qa=void 0,Va=void 0;for(Pa in Ub.attributes){Va=Pa==="index"?g.ELEMENT_ARRAY_BUFFER:g.ARRAY_BUFFER;Qa=Ub.attributes[Pa];Qa.buffer=g.createBuffer();g.bindBuffer(Va,Qa.buffer);g.bufferData(Va,Qa.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();E.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();E.info.memory.geometries++;var kc=k,Wb=h,Mb=kc.vertices.length;kc.__vertexArray=new Float32Array(Mb*3);kc.__colorArray=new Float32Array(Mb*3);kc.__webglLineCount=Mb;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();E.info.geometries++;var Xb=k,hc=h,Nb=Xb.vertices.length;Xb.__vertexArray=new Float32Array(Nb*3);Xb.__colorArray=new Float32Array(Nb*3);Xb.__sortArray=[];Xb.__webglParticleCount=Nb;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],zc=a;Ra instanceof THREE.Mesh||Ra instanceof THREE.ParticleSystem||Ra instanceof THREE.Ribbon||Ra instanceof THREE.Line?u(zc.__webglObjects,Ra):Ra instanceof THREE.Sprite?o(zc.__webglSprites,Ra):Ra instanceof THREE.LensFlare?o(zc.__webglFlares,Ra):(Ra instanceof THREE.ImmediateRenderObject||Ra.immediateRenderCallback)&&u(zc.__webglObjectsImmediate,Ra);Ra.__webglActive=false;a.__objectsRemoved.splice(0,1)}for(var Ob=0,ic=a.__webglObjects.length;Ob<
+ic;Ob++){var Xa=a.__webglObjects[Ob].object,W=Xa.geometry,lc=void 0,Yb=void 0,Ka=void 0;if(Xa instanceof THREE.Mesh)if(W instanceof THREE.BufferGeometry){if(W.verticesNeedUpdate||W.elementsNeedUpdate||W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate){var qb=W,Zb=g.DYNAMIC_DRAW,jc=!W.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}}W.verticesNeedUpdate=false;W.elementsNeedUpdate=false;W.uvsNeedUpdate=false;W.normalsNeedUpdate=false;W.colorsNeedUpdate=false;W.tangentsNeedUpdate=false}else{for(var Xc=0,xc=W.geometryGroupsList.length;Xc<xc;Xc++){lc=W.geometryGroupsList[Xc];Ka=c(Xa,lc);Yb=Ka.attributes&&n(Ka);if(W.verticesNeedUpdate||W.morphTargetsNeedUpdate||W.elementsNeedUpdate||
+W.uvsNeedUpdate||W.normalsNeedUpdate||W.colorsNeedUpdate||W.tangentsNeedUpdate||Yb){var Y=lc,yc=Xa,Ma=g.DYNAMIC_DRAW,Oc=!W.dynamic,Pb=Ka;if(Y.__inittedArrays){var fd=d(Pb),Yc=Pb.vertexColors?Pb.vertexColors:false,gd=f(Pb),Ac=fd===THREE.SmoothShading,y=void 0,M=void 0,Ua=void 0,C=void 0,ac=void 0,yb=void 0,Ya=void 0,Bc=void 0,rb=void 0,bc=void 0,cc=void 0,O=void 0,P=void 0,Q=void 0,ga=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,Cc=void 0,Cb=void 0,Db=void 0,Eb=void 0,Dc=void 0,ca=void 0,hd=void 0,Fb=void 0,dc=void 0,ec=void 0,Ca=void 0,id=void 0,ya=void 0,za=void 0,Gb=void 0,sb=void 0,sa=0,wa=0,tb=0,ub=0,Sa=0,Ga=0,ha=0,Ia=0,ta=0,B=0,X=0,w=0,Na=void 0,Da=Y.__vertexArray,rc=Y.__uvArray,sc=Y.__uv2Array,Ta=Y.__normalArray,ka=Y.__tangentArray,Ea=Y.__colorArray,la=Y.__skinVertexAArray,ma=Y.__skinVertexBArray,
+na=Y.__skinIndexArray,oa=Y.__skinWeightArray,Zc=Y.__morphTargetsArrays,$c=Y.__morphNormalsArrays,ad=Y.__webglCustomAttributesList,t=void 0,ob=Y.__faceArray,Oa=Y.__lineArray,Ja=yc.geometry,Pc=Ja.elementsNeedUpdate,jd=Ja.uvsNeedUpdate,Qc=Ja.normalsNeedUpdate,qd=Ja.tangentsNeedUpdate,rd=Ja.colorsNeedUpdate,sd=Ja.morphTargetsNeedUpdate,Qb=Ja.vertices,da=Y.faces3,ea=Y.faces4,ua=Ja.faces,bd=Ja.faceVertexUvs[0],cd=Ja.faceVertexUvs[1],Rb=Ja.skinVerticesA,Sb=Ja.skinVerticesB,Tb=Ja.skinIndices,Hb=Ja.skinWeights,
 Ib=Ja.morphTargets,Ec=Ja.morphNormals;if(Ja.verticesNeedUpdate){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];O=Qb[C.a];P=Qb[C.b];Q=Qb[C.c];Da[wa]=O.x;Da[wa+1]=O.y;Da[wa+2]=O.z;Da[wa+3]=P.x;Da[wa+4]=P.y;Da[wa+5]=P.z;Da[wa+6]=Q.x;Da[wa+7]=Q.y;Da[wa+8]=Q.z;wa=wa+9}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];O=Qb[C.a];P=Qb[C.b];Q=Qb[C.c];ga=Qb[C.d];Da[wa]=O.x;Da[wa+1]=O.y;Da[wa+2]=O.z;Da[wa+3]=P.x;Da[wa+4]=P.y;Da[wa+5]=P.z;Da[wa+6]=Q.x;Da[wa+7]=Q.y;Da[wa+8]=Q.z;Da[wa+9]=ga.x;Da[wa+10]=ga.y;Da[wa+11]=ga.z;wa=
-wa+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Da,Ma)}if(sd){Ca=0;for(id=Ib.length;Ca<id;Ca++){y=X=0;for(M=da.length;y<M;y++){Gb=da[y];C=ua[Gb];O=Ib[Ca].vertices[C.a];P=Ib[Ca].vertices[C.b];Q=Ib[Ca].vertices[C.c];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;if(Pb.morphNormals){if(Ac){sb=Ec[Ca].vertexNormals[Gb];bb=sb.a;cb=sb.b;db=sb.c}else db=cb=bb=Ec[Ca].faceNormals[Gb];za=$c[Ca];za[X]=bb.x;
-za[X+1]=bb.y;za[X+2]=bb.z;za[X+3]=cb.x;za[X+4]=cb.y;za[X+5]=cb.z;za[X+6]=db.x;za[X+7]=db.y;za[X+8]=db.z}X=X+9}y=0;for(M=ea.length;y<M;y++){Gb=ea[y];C=ua[Gb];O=Ib[Ca].vertices[C.a];P=Ib[Ca].vertices[C.b];Q=Ib[Ca].vertices[C.c];ga=Ib[Ca].vertices[C.d];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;ya[X+9]=ga.x;ya[X+10]=ga.y;ya[X+11]=ga.z;if(Pb.morphNormals){if(Ac){sb=Ec[Ca].vertexNormals[Gb];bb=sb.a;cb=sb.b;db=sb.c;nc=sb.d}else nc=
-db=cb=bb=Ec[Ca].faceNormals[Gb];za=$c[Ca];za[X]=bb.x;za[X+1]=bb.y;za[X+2]=bb.z;za[X+3]=cb.x;za[X+4]=cb.y;za[X+5]=cb.z;za[X+6]=db.x;za[X+7]=db.y;za[X+8]=db.z;za[X+9]=nc.x;za[X+10]=nc.y;za[X+11]=nc.z}X=X+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphTargetsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,Zc[Ca],Ma);if(Pb.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphNormalsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,$c[Ca],Ma)}}}if(Hb.length){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];hb=Hb[C.a];ib=Hb[C.b];
-jb=Hb[C.c];oa[B]=hb.x;oa[B+1]=hb.y;oa[B+2]=hb.z;oa[B+3]=hb.w;oa[B+4]=ib.x;oa[B+5]=ib.y;oa[B+6]=ib.z;oa[B+7]=ib.w;oa[B+8]=jb.x;oa[B+9]=jb.y;oa[B+10]=jb.z;oa[B+11]=jb.w;kb=Tb[C.a];lb=Tb[C.b];mb=Tb[C.c];na[B]=kb.x;na[B+1]=kb.y;na[B+2]=kb.z;na[B+3]=kb.w;na[B+4]=lb.x;na[B+5]=lb.y;na[B+6]=lb.z;na[B+7]=lb.w;na[B+8]=mb.x;na[B+9]=mb.y;na[B+10]=mb.z;na[B+11]=mb.w;zb=Rb[C.a];Ab=Rb[C.b];Bb=Rb[C.c];la[B]=zb.x;la[B+1]=zb.y;la[B+2]=zb.z;la[B+3]=1;la[B+4]=Ab.x;la[B+5]=Ab.y;la[B+6]=Ab.z;la[B+7]=1;la[B+8]=Bb.x;la[B+
-9]=Bb.y;la[B+10]=Bb.z;la[B+11]=1;Cb=Sb[C.a];Db=Sb[C.b];Eb=Sb[C.c];ma[B]=Cb.x;ma[B+1]=Cb.y;ma[B+2]=Cb.z;ma[B+3]=1;ma[B+4]=Db.x;ma[B+5]=Db.y;ma[B+6]=Db.z;ma[B+7]=1;ma[B+8]=Eb.x;ma[B+9]=Eb.y;ma[B+10]=Eb.z;ma[B+11]=1;B=B+12}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];hb=Hb[C.a];ib=Hb[C.b];jb=Hb[C.c];pc=Hb[C.d];oa[B]=hb.x;oa[B+1]=hb.y;oa[B+2]=hb.z;oa[B+3]=hb.w;oa[B+4]=ib.x;oa[B+5]=ib.y;oa[B+6]=ib.z;oa[B+7]=ib.w;oa[B+8]=jb.x;oa[B+9]=jb.y;oa[B+10]=jb.z;oa[B+11]=jb.w;oa[B+12]=pc.x;oa[B+13]=pc.y;oa[B+14]=pc.z;
-oa[B+15]=pc.w;kb=Tb[C.a];lb=Tb[C.b];mb=Tb[C.c];qc=Tb[C.d];na[B]=kb.x;na[B+1]=kb.y;na[B+2]=kb.z;na[B+3]=kb.w;na[B+4]=lb.x;na[B+5]=lb.y;na[B+6]=lb.z;na[B+7]=lb.w;na[B+8]=mb.x;na[B+9]=mb.y;na[B+10]=mb.z;na[B+11]=mb.w;na[B+12]=qc.x;na[B+13]=qc.y;na[B+14]=qc.z;na[B+15]=qc.w;zb=Rb[C.a];Ab=Rb[C.b];Bb=Rb[C.c];Cc=Rb[C.d];la[B]=zb.x;la[B+1]=zb.y;la[B+2]=zb.z;la[B+3]=1;la[B+4]=Ab.x;la[B+5]=Ab.y;la[B+6]=Ab.z;la[B+7]=1;la[B+8]=Bb.x;la[B+9]=Bb.y;la[B+10]=Bb.z;la[B+11]=1;la[B+12]=Cc.x;la[B+13]=Cc.y;la[B+14]=Cc.z;
+wa+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglVertexBuffer);g.bufferData(g.ARRAY_BUFFER,Da,Ma)}if(sd){Ca=0;for(id=Ib.length;Ca<id;Ca++){y=X=0;for(M=da.length;y<M;y++){Gb=da[y];C=ua[Gb];O=Ib[Ca].vertices[C.a];P=Ib[Ca].vertices[C.b];Q=Ib[Ca].vertices[C.c];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;if(Pb.morphNormals){if(Ac){sb=Ec[Ca].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c}else eb=db=cb=Ec[Ca].faceNormals[Gb];za=$c[Ca];za[X]=cb.x;
+za[X+1]=cb.y;za[X+2]=cb.z;za[X+3]=db.x;za[X+4]=db.y;za[X+5]=db.z;za[X+6]=eb.x;za[X+7]=eb.y;za[X+8]=eb.z}X=X+9}y=0;for(M=ea.length;y<M;y++){Gb=ea[y];C=ua[Gb];O=Ib[Ca].vertices[C.a];P=Ib[Ca].vertices[C.b];Q=Ib[Ca].vertices[C.c];ga=Ib[Ca].vertices[C.d];ya=Zc[Ca];ya[X]=O.x;ya[X+1]=O.y;ya[X+2]=O.z;ya[X+3]=P.x;ya[X+4]=P.y;ya[X+5]=P.z;ya[X+6]=Q.x;ya[X+7]=Q.y;ya[X+8]=Q.z;ya[X+9]=ga.x;ya[X+10]=ga.y;ya[X+11]=ga.z;if(Pb.morphNormals){if(Ac){sb=Ec[Ca].vertexNormals[Gb];cb=sb.a;db=sb.b;eb=sb.c;nc=sb.d}else nc=
+eb=db=cb=Ec[Ca].faceNormals[Gb];za=$c[Ca];za[X]=cb.x;za[X+1]=cb.y;za[X+2]=cb.z;za[X+3]=db.x;za[X+4]=db.y;za[X+5]=db.z;za[X+6]=eb.x;za[X+7]=eb.y;za[X+8]=eb.z;za[X+9]=nc.x;za[X+10]=nc.y;za[X+11]=nc.z}X=X+12}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphTargetsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,Zc[Ca],Ma);if(Pb.morphNormals){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglMorphNormalsBuffers[Ca]);g.bufferData(g.ARRAY_BUFFER,$c[Ca],Ma)}}}if(Hb.length){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];ib=Hb[C.a];jb=Hb[C.b];
+kb=Hb[C.c];oa[B]=ib.x;oa[B+1]=ib.y;oa[B+2]=ib.z;oa[B+3]=ib.w;oa[B+4]=jb.x;oa[B+5]=jb.y;oa[B+6]=jb.z;oa[B+7]=jb.w;oa[B+8]=kb.x;oa[B+9]=kb.y;oa[B+10]=kb.z;oa[B+11]=kb.w;lb=Tb[C.a];mb=Tb[C.b];nb=Tb[C.c];na[B]=lb.x;na[B+1]=lb.y;na[B+2]=lb.z;na[B+3]=lb.w;na[B+4]=mb.x;na[B+5]=mb.y;na[B+6]=mb.z;na[B+7]=mb.w;na[B+8]=nb.x;na[B+9]=nb.y;na[B+10]=nb.z;na[B+11]=nb.w;zb=Rb[C.a];Ab=Rb[C.b];Bb=Rb[C.c];la[B]=zb.x;la[B+1]=zb.y;la[B+2]=zb.z;la[B+3]=1;la[B+4]=Ab.x;la[B+5]=Ab.y;la[B+6]=Ab.z;la[B+7]=1;la[B+8]=Bb.x;la[B+
+9]=Bb.y;la[B+10]=Bb.z;la[B+11]=1;Cb=Sb[C.a];Db=Sb[C.b];Eb=Sb[C.c];ma[B]=Cb.x;ma[B+1]=Cb.y;ma[B+2]=Cb.z;ma[B+3]=1;ma[B+4]=Db.x;ma[B+5]=Db.y;ma[B+6]=Db.z;ma[B+7]=1;ma[B+8]=Eb.x;ma[B+9]=Eb.y;ma[B+10]=Eb.z;ma[B+11]=1;B=B+12}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];ib=Hb[C.a];jb=Hb[C.b];kb=Hb[C.c];pc=Hb[C.d];oa[B]=ib.x;oa[B+1]=ib.y;oa[B+2]=ib.z;oa[B+3]=ib.w;oa[B+4]=jb.x;oa[B+5]=jb.y;oa[B+6]=jb.z;oa[B+7]=jb.w;oa[B+8]=kb.x;oa[B+9]=kb.y;oa[B+10]=kb.z;oa[B+11]=kb.w;oa[B+12]=pc.x;oa[B+13]=pc.y;oa[B+14]=pc.z;
+oa[B+15]=pc.w;lb=Tb[C.a];mb=Tb[C.b];nb=Tb[C.c];qc=Tb[C.d];na[B]=lb.x;na[B+1]=lb.y;na[B+2]=lb.z;na[B+3]=lb.w;na[B+4]=mb.x;na[B+5]=mb.y;na[B+6]=mb.z;na[B+7]=mb.w;na[B+8]=nb.x;na[B+9]=nb.y;na[B+10]=nb.z;na[B+11]=nb.w;na[B+12]=qc.x;na[B+13]=qc.y;na[B+14]=qc.z;na[B+15]=qc.w;zb=Rb[C.a];Ab=Rb[C.b];Bb=Rb[C.c];Cc=Rb[C.d];la[B]=zb.x;la[B+1]=zb.y;la[B+2]=zb.z;la[B+3]=1;la[B+4]=Ab.x;la[B+5]=Ab.y;la[B+6]=Ab.z;la[B+7]=1;la[B+8]=Bb.x;la[B+9]=Bb.y;la[B+10]=Bb.z;la[B+11]=1;la[B+12]=Cc.x;la[B+13]=Cc.y;la[B+14]=Cc.z;
 la[B+15]=1;Cb=Sb[C.a];Db=Sb[C.b];Eb=Sb[C.c];Dc=Sb[C.d];ma[B]=Cb.x;ma[B+1]=Cb.y;ma[B+2]=Cb.z;ma[B+3]=1;ma[B+4]=Db.x;ma[B+5]=Db.y;ma[B+6]=Db.z;ma[B+7]=1;ma[B+8]=Eb.x;ma[B+9]=Eb.y;ma[B+10]=Eb.z;ma[B+11]=1;ma[B+12]=Dc.x;ma[B+13]=Dc.y;ma[B+14]=Dc.z;ma[B+15]=1;B=B+16}if(B>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinVertexABuffer);g.bufferData(g.ARRAY_BUFFER,la,Ma);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinVertexBBuffer);g.bufferData(g.ARRAY_BUFFER,ma,Ma);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinIndicesBuffer);
-g.bufferData(g.ARRAY_BUFFER,na,Ma);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinWeightsBuffer);g.bufferData(g.ARRAY_BUFFER,oa,Ma)}}if(rd&&Yc){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];Ya=C.vertexColors;Bc=C.color;if(Ya.length===3&&Yc===THREE.VertexColors){eb=Ya[0];fb=Ya[1];gb=Ya[2]}else gb=fb=eb=Bc;Ea[ta]=eb.r;Ea[ta+1]=eb.g;Ea[ta+2]=eb.b;Ea[ta+3]=fb.r;Ea[ta+4]=fb.g;Ea[ta+5]=fb.b;Ea[ta+6]=gb.r;Ea[ta+7]=gb.g;Ea[ta+8]=gb.b;ta=ta+9}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];Ya=C.vertexColors;Bc=C.color;if(Ya.length===
-4&&Yc===THREE.VertexColors){eb=Ya[0];fb=Ya[1];gb=Ya[2];oc=Ya[3]}else oc=gb=fb=eb=Bc;Ea[ta]=eb.r;Ea[ta+1]=eb.g;Ea[ta+2]=eb.b;Ea[ta+3]=fb.r;Ea[ta+4]=fb.g;Ea[ta+5]=fb.b;Ea[ta+6]=gb.r;Ea[ta+7]=gb.g;Ea[ta+8]=gb.b;Ea[ta+9]=oc.r;Ea[ta+10]=oc.g;Ea[ta+11]=oc.b;ta=ta+12}if(ta>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Ea,Ma)}}if(qd&&Ja.hasTangents){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];rb=C.vertexTangents;Za=rb[0];$a=rb[1];ab=rb[2];ka[ha]=Za.x;ka[ha+1]=Za.y;ka[ha+2]=
-Za.z;ka[ha+3]=Za.w;ka[ha+4]=$a.x;ka[ha+5]=$a.y;ka[ha+6]=$a.z;ka[ha+7]=$a.w;ka[ha+8]=ab.x;ka[ha+9]=ab.y;ka[ha+10]=ab.z;ka[ha+11]=ab.w;ha=ha+12}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];rb=C.vertexTangents;Za=rb[0];$a=rb[1];ab=rb[2];mc=rb[3];ka[ha]=Za.x;ka[ha+1]=Za.y;ka[ha+2]=Za.z;ka[ha+3]=Za.w;ka[ha+4]=$a.x;ka[ha+5]=$a.y;ka[ha+6]=$a.z;ka[ha+7]=$a.w;ka[ha+8]=ab.x;ka[ha+9]=ab.y;ka[ha+10]=ab.z;ka[ha+11]=ab.w;ka[ha+12]=mc.x;ka[ha+13]=mc.y;ka[ha+14]=mc.z;ka[ha+15]=mc.w;ha=ha+16}g.bindBuffer(g.ARRAY_BUFFER,
+g.bufferData(g.ARRAY_BUFFER,na,Ma);g.bindBuffer(g.ARRAY_BUFFER,Y.__webglSkinWeightsBuffer);g.bufferData(g.ARRAY_BUFFER,oa,Ma)}}if(rd&&Yc){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];Ya=C.vertexColors;Bc=C.color;if(Ya.length===3&&Yc===THREE.VertexColors){fb=Ya[0];gb=Ya[1];hb=Ya[2]}else hb=gb=fb=Bc;Ea[ta]=fb.r;Ea[ta+1]=fb.g;Ea[ta+2]=fb.b;Ea[ta+3]=gb.r;Ea[ta+4]=gb.g;Ea[ta+5]=gb.b;Ea[ta+6]=hb.r;Ea[ta+7]=hb.g;Ea[ta+8]=hb.b;ta=ta+9}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];Ya=C.vertexColors;Bc=C.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=Bc;Ea[ta]=fb.r;Ea[ta+1]=fb.g;Ea[ta+2]=fb.b;Ea[ta+3]=gb.r;Ea[ta+4]=gb.g;Ea[ta+5]=gb.b;Ea[ta+6]=hb.r;Ea[ta+7]=hb.g;Ea[ta+8]=hb.b;Ea[ta+9]=oc.r;Ea[ta+10]=oc.g;Ea[ta+11]=oc.b;ta=ta+12}if(ta>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglColorBuffer);g.bufferData(g.ARRAY_BUFFER,Ea,Ma)}}if(qd&&Ja.hasTangents){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];rb=C.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];ka[ha]=$a.x;ka[ha+1]=$a.y;ka[ha+2]=
+$a.z;ka[ha+3]=$a.w;ka[ha+4]=ab.x;ka[ha+5]=ab.y;ka[ha+6]=ab.z;ka[ha+7]=ab.w;ka[ha+8]=bb.x;ka[ha+9]=bb.y;ka[ha+10]=bb.z;ka[ha+11]=bb.w;ha=ha+12}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];rb=C.vertexTangents;$a=rb[0];ab=rb[1];bb=rb[2];mc=rb[3];ka[ha]=$a.x;ka[ha+1]=$a.y;ka[ha+2]=$a.z;ka[ha+3]=$a.w;ka[ha+4]=ab.x;ka[ha+5]=ab.y;ka[ha+6]=ab.z;ka[ha+7]=ab.w;ka[ha+8]=bb.x;ka[ha+9]=bb.y;ka[ha+10]=bb.z;ka[ha+11]=bb.w;ka[ha+12]=mc.x;ka[ha+13]=mc.y;ka[ha+14]=mc.z;ka[ha+15]=mc.w;ha=ha+16}g.bindBuffer(g.ARRAY_BUFFER,
 Y.__webglTangentBuffer);g.bufferData(g.ARRAY_BUFFER,ka,Ma)}if(Qc&&fd){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];ac=C.vertexNormals;yb=C.normal;if(ac.length===3&&Ac)for(ca=0;ca<3;ca++){Fb=ac[ca];Ta[Ga]=Fb.x;Ta[Ga+1]=Fb.y;Ta[Ga+2]=Fb.z;Ga=Ga+3}else for(ca=0;ca<3;ca++){Ta[Ga]=yb.x;Ta[Ga+1]=yb.y;Ta[Ga+2]=yb.z;Ga=Ga+3}}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];ac=C.vertexNormals;yb=C.normal;if(ac.length===4&&Ac)for(ca=0;ca<4;ca++){Fb=ac[ca];Ta[Ga]=Fb.x;Ta[Ga+1]=Fb.y;Ta[Ga+2]=Fb.z;Ga=Ga+3}else for(ca=0;ca<
 4;ca++){Ta[Ga]=yb.x;Ta[Ga+1]=yb.y;Ta[Ga+2]=yb.z;Ga=Ga+3}}g.bindBuffer(g.ARRAY_BUFFER,Y.__webglNormalBuffer);g.bufferData(g.ARRAY_BUFFER,Ta,Ma)}if(jd&&bd&&gd){y=0;for(M=da.length;y<M;y++){Ua=da[y];C=ua[Ua];bc=bd[Ua];if(bc!==void 0)for(ca=0;ca<3;ca++){dc=bc[ca];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}y=0;for(M=ea.length;y<M;y++){Ua=ea[y];C=ua[Ua];bc=bd[Ua];if(bc!==void 0)for(ca=0;ca<4;ca++){dc=bc[ca];rc[tb]=dc.u;rc[tb+1]=dc.v;tb=tb+2}}if(tb>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglUVBuffer);g.bufferData(g.ARRAY_BUFFER,
-rc,Ma)}}if(jd&&cd&&gd){y=0;for(M=da.length;y<M;y++){Ua=da[y];C=ua[Ua];cc=cd[Ua];if(cc!==void 0)for(ca=0;ca<3;ca++){ec=cc[ca];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}y=0;for(M=ea.length;y<M;y++){Ua=ea[y];C=ua[Ua];cc=cd[Ua];if(cc!==void 0)for(ca=0;ca<4;ca++){ec=cc[ca];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}if(ub>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglUV2Buffer);g.bufferData(g.ARRAY_BUFFER,sc,Ma)}}if(Pc){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];nb[Sa]=sa;nb[Sa+1]=sa+1;nb[Sa+2]=sa+2;Sa=Sa+3;Oa[Ia]=sa;Oa[Ia+1]=
-sa+1;Oa[Ia+2]=sa;Oa[Ia+3]=sa+2;Oa[Ia+4]=sa+1;Oa[Ia+5]=sa+2;Ia=Ia+6;sa=sa+3}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];nb[Sa]=sa;nb[Sa+1]=sa+1;nb[Sa+2]=sa+3;nb[Sa+3]=sa+1;nb[Sa+4]=sa+2;nb[Sa+5]=sa+3;Sa=Sa+6;Oa[Ia]=sa;Oa[Ia+1]=sa+1;Oa[Ia+2]=sa;Oa[Ia+3]=sa+3;Oa[Ia+4]=sa+1;Oa[Ia+5]=sa+2;Oa[Ia+6]=sa+2;Oa[Ia+7]=sa+3;Ia=Ia+8;sa=sa+4}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Y.__webglFaceBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,nb,Ma);g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Y.__webglLineBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,
+rc,Ma)}}if(jd&&cd&&gd){y=0;for(M=da.length;y<M;y++){Ua=da[y];C=ua[Ua];cc=cd[Ua];if(cc!==void 0)for(ca=0;ca<3;ca++){ec=cc[ca];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}y=0;for(M=ea.length;y<M;y++){Ua=ea[y];C=ua[Ua];cc=cd[Ua];if(cc!==void 0)for(ca=0;ca<4;ca++){ec=cc[ca];sc[ub]=ec.u;sc[ub+1]=ec.v;ub=ub+2}}if(ub>0){g.bindBuffer(g.ARRAY_BUFFER,Y.__webglUV2Buffer);g.bufferData(g.ARRAY_BUFFER,sc,Ma)}}if(Pc){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];ob[Sa]=sa;ob[Sa+1]=sa+1;ob[Sa+2]=sa+2;Sa=Sa+3;Oa[Ia]=sa;Oa[Ia+1]=
+sa+1;Oa[Ia+2]=sa;Oa[Ia+3]=sa+2;Oa[Ia+4]=sa+1;Oa[Ia+5]=sa+2;Ia=Ia+6;sa=sa+3}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];ob[Sa]=sa;ob[Sa+1]=sa+1;ob[Sa+2]=sa+3;ob[Sa+3]=sa+1;ob[Sa+4]=sa+2;ob[Sa+5]=sa+3;Sa=Sa+6;Oa[Ia]=sa;Oa[Ia+1]=sa+1;Oa[Ia+2]=sa;Oa[Ia+3]=sa+3;Oa[Ia+4]=sa+1;Oa[Ia+5]=sa+2;Oa[Ia+6]=sa+2;Oa[Ia+7]=sa+3;Ia=Ia+8;sa=sa+4}g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Y.__webglFaceBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,ob,Ma);g.bindBuffer(g.ELEMENT_ARRAY_BUFFER,Y.__webglLineBuffer);g.bufferData(g.ELEMENT_ARRAY_BUFFER,
 Oa,Ma)}if(ad){ca=0;for(hd=ad.length;ca<hd;ca++){t=ad[ca];if(t.__original.needsUpdate){w=0;if(t.size===1)if(t.boundTo===void 0||t.boundTo==="vertices"){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];t.array[w]=t.value[C.a];t.array[w+1]=t.value[C.b];t.array[w+2]=t.value[C.c];w=w+3}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];t.array[w]=t.value[C.a];t.array[w+1]=t.value[C.b];t.array[w+2]=t.value[C.c];t.array[w+3]=t.value[C.d];w=w+4}}else{if(t.boundTo==="faces"){y=0;for(M=da.length;y<M;y++){Na=t.value[da[y]];t.array[w]=
 Na;t.array[w+1]=Na;t.array[w+2]=Na;w=w+3}y=0;for(M=ea.length;y<M;y++){Na=t.value[ea[y]];t.array[w]=Na;t.array[w+1]=Na;t.array[w+2]=Na;t.array[w+3]=Na;w=w+4}}}else if(t.size===2)if(t.boundTo===void 0||t.boundTo==="vertices"){y=0;for(M=da.length;y<M;y++){C=ua[da[y]];O=t.value[C.a];P=t.value[C.b];Q=t.value[C.c];t.array[w]=O.x;t.array[w+1]=O.y;t.array[w+2]=P.x;t.array[w+3]=P.y;t.array[w+4]=Q.x;t.array[w+5]=Q.y;w=w+6}y=0;for(M=ea.length;y<M;y++){C=ua[ea[y]];O=t.value[C.a];P=t.value[C.b];Q=t.value[C.c];
 ga=t.value[C.d];t.array[w]=O.x;t.array[w+1]=O.y;t.array[w+2]=P.x;t.array[w+3]=P.y;t.array[w+4]=Q.x;t.array[w+5]=Q.y;t.array[w+6]=ga.x;t.array[w+7]=ga.y;w=w+8}}else{if(t.boundTo==="faces"){y=0;for(M=da.length;y<M;y++){Q=P=O=Na=t.value[da[y]];t.array[w]=O.x;t.array[w+1]=O.y;t.array[w+2]=P.x;t.array[w+3]=P.y;t.array[w+4]=Q.x;t.array[w+5]=Q.y;w=w+6}y=0;for(M=ea.length;y<M;y++){ga=Q=P=O=Na=t.value[ea[y]];t.array[w]=O.x;t.array[w+1]=O.y;t.array[w+2]=P.x;t.array[w+3]=P.y;t.array[w+4]=Q.x;t.array[w+5]=Q.y;
@@ -417,10 +417,10 @@ Infinity),max:new THREE.Vector3(-Infinity,-Infinity,-Infinity)};var a=this.attri
 {radius:0};var a=this.attributes.position.array;if(a){for(var b,c=0,d,f,e=0,h=a.length;e<h;e=e+3){b=a[e];d=a[e+1];f=a[e+2];b=Math.sqrt(b*b+d*d+f*f);b>c&&(c=b)}this.boundingSphere.radius=c}},computeVertexNormals:function(){if(this.attributes.position&&this.attributes.index){var a,b,c,d;a=this.attributes.position.array.length;if(this.attributes.normal===void 0)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;a<b;a++)this.attributes.normal.array[a]=
 0}var f=this.offsets,e=this.attributes.index.array,h=this.attributes.position.array,j=this.attributes.normal.array,l,k,i,m,n,q,u=new THREE.Vector3,o=new THREE.Vector3,r=new THREE.Vector3,p=new THREE.Vector3,v=new THREE.Vector3;c=0;for(d=f.length;c<d;++c){b=f[c].start;l=f[c].count;var x=f[c].index;a=b;for(b=b+l;a<b;a=a+3){l=x+e[a];k=x+e[a+1];i=x+e[a+2];m=h[l*3];n=h[l*3+1];q=h[l*3+2];u.set(m,n,q);m=h[k*3];n=h[k*3+1];q=h[k*3+2];o.set(m,n,q);m=h[i*3];n=h[i*3+1];q=h[i*3+2];r.set(m,n,q);p.sub(r,o);v.sub(u,
 o);p.crossSelf(v);j[l*3]=j[l*3]+p.x;j[l*3+1]=j[l*3+1]+p.y;j[l*3+2]=j[l*3+2]+p.z;j[k*3]=j[k*3]+p.x;j[k*3+1]=j[k*3+1]+p.y;j[k*3+2]=j[k*3+2]+p.z;j[i*3]=j[i*3]+p.x;j[i*3+1]=j[i*3+1]+p.y;j[i*3+2]=j[i*3+2]+p.z}}a=0;for(b=j.length;a<b;a=a+3){m=j[a];n=j[a+1];q=j[a+2];c=1/Math.sqrt(m*m+n*n+q*q);j[a]=j[a]*c;j[a+1]=j[a+1]*c;j[a+2]=j[a+2]*c}this.normalsNeedUpdate=true}},computeTangents:function(){function a(a,b,c){m=d[a*3];n=d[a*3+1];q=d[a*3+2];u=d[b*3];o=d[b*3+1];r=d[b*3+2];p=d[c*3];v=d[c*3+1];x=d[c*3+2];F=
-e[a*2];s=e[a*2+1];I=e[b*2];A=e[b*2+1];N=e[c*2];D=e[c*2+1];H=u-m;G=p-m;R=o-n;U=v-n;T=r-q;z=x-q;K=I-F;V=N-F;E=A-s;$=D-s;fa=1/(K*$-V*E);J.set(($*H-E*G)*fa,($*R-E*U)*fa,($*T-E*z)*fa);ra.set((K*G-V*H)*fa,(K*U-V*R)*fa,(K*z-V*T)*fa);k[a].addSelf(J);k[b].addSelf(J);k[c].addSelf(J);i[a].addSelf(ra);i[b].addSelf(ra);i[c].addSelf(ra)}function b(a){ja.x=f[a*3];ja.y=f[a*3+1];ja.z=f[a*3+2];Ba.copy(ja);Va=k[a];Aa.copy(Va);Aa.subSelf(ja.multiplyScalar(ja.dot(Va))).normalize();Pa.cross(Ba,Va);ob=Pa.dot(i[a]);Qa=ob<
+e[a*2];s=e[a*2+1];I=e[b*2];A=e[b*2+1];N=e[c*2];D=e[c*2+1];H=u-m;G=p-m;R=o-n;U=v-n;T=r-q;z=x-q;K=I-F;V=N-F;E=A-s;$=D-s;fa=1/(K*$-V*E);J.set(($*H-E*G)*fa,($*R-E*U)*fa,($*T-E*z)*fa);ra.set((K*G-V*H)*fa,(K*U-V*R)*fa,(K*z-V*T)*fa);k[a].addSelf(J);k[b].addSelf(J);k[c].addSelf(J);i[a].addSelf(ra);i[b].addSelf(ra);i[c].addSelf(ra)}function b(a){ja.x=f[a*3];ja.y=f[a*3+1];ja.z=f[a*3+2];Ba.copy(ja);Va=k[a];Aa.copy(Va);Aa.subSelf(ja.multiplyScalar(ja.dot(Va))).normalize();Pa.cross(Ba,Va);wb=Pa.dot(i[a]);Qa=wb<
 0?-1:1;l[a*4]=Aa.x;l[a*4+1]=Aa.y;l[a*4+2]=Aa.z;l[a*4+3]=Qa}if(this.attributes.index===void 0||this.attributes.position===void 0||this.attributes.normal===void 0||this.attributes.uv===void 0)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var c=this.attributes.index.array,d=this.attributes.position.array,f=this.attributes.normal.array,e=this.attributes.uv.array,h=d.length/3;if(this.attributes.tangent===void 0){var j=4*h;this.attributes.tangent=
 {itemSize:4,array:new Float32Array(j),numItems:j}}for(var l=this.attributes.tangent.array,k=[],i=[],j=0;j<h;j++){k[j]=new THREE.Vector3;i[j]=new THREE.Vector3}var m,n,q,u,o,r,p,v,x,F,s,I,A,N,D,H,G,R,U,T,z,K,V,E,$,fa,J=new THREE.Vector3,ra=new THREE.Vector3,S,ba,aa,va,L,qa=this.offsets,j=0;for(ba=qa.length;j<ba;++j){S=qa[j].start;aa=qa[j].count;var xa=qa[j].index,h=S;for(S=S+aa;h<S;h=h+3){aa=xa+c[h];va=xa+c[h+1];L=xa+c[h+2];a(aa,va,L)}}var Aa=new THREE.Vector3,Pa=new THREE.Vector3,ja=new THREE.Vector3,
-Ba=new THREE.Vector3,Qa,Va,ob,j=0;for(ba=qa.length;j<ba;++j){S=qa[j].start;aa=qa[j].count;xa=qa[j].index;h=S;for(S=S+aa;h<S;h=h+3){aa=xa+c[h];va=xa+c[h+1];L=xa+c[h+2];b(aa);b(va);b(L)}}this.tangentsNeedUpdate=this.hasTangents=true}}};THREE.Gyroscope=function(){THREE.Object3D.call(this)};THREE.Gyroscope.prototype=Object.create(THREE.Object3D.prototype);
+Ba=new THREE.Vector3,Qa,Va,wb,j=0;for(ba=qa.length;j<ba;++j){S=qa[j].start;aa=qa[j].count;xa=qa[j].index;h=S;for(S=S+aa;h<S;h=h+3){aa=xa+c[h];va=xa+c[h+1];L=xa+c[h+2];b(aa);b(va);b(L)}}this.tangentsNeedUpdate=this.hasTangents=true}}};THREE.Gyroscope=function(){THREE.Object3D.call(this)};THREE.Gyroscope.prototype=Object.create(THREE.Object3D.prototype);
 THREE.Gyroscope.prototype.updateMatrixWorld=function(a){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||a){if(this.parent){this.matrixWorld.multiply(this.parent.matrixWorld,this.matrix);this.matrixWorld.decompose(this.translationWorld,this.rotationWorld,this.scaleWorld);this.matrix.decompose(this.translationObject,this.rotationObject,this.scaleObject);this.matrixWorld.compose(this.translationWorld,this.rotationObject,this.scaleWorld)}else this.matrixWorld.copy(this.matrix);
 this.matrixWorldNeedsUpdate=false;a=true}for(var b=0,c=this.children.length;b<c;b++)this.children[b].updateMatrixWorld(a)};THREE.Gyroscope.prototype.translationWorld=new THREE.Vector3;THREE.Gyroscope.prototype.translationObject=new THREE.Vector3;THREE.Gyroscope.prototype.rotationWorld=new THREE.Quaternion;THREE.Gyroscope.prototype.rotationObject=new THREE.Quaternion;THREE.Gyroscope.prototype.scaleWorld=new THREE.Vector3;THREE.Gyroscope.prototype.scaleObject=new THREE.Vector3;
 THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.lineGeometry.vertices.push(new THREE.Vector3);d.lineGeometry.colors.push(new THREE.Color(b));d.pointMap[a]===void 0&&(d.pointMap[a]=[]);d.pointMap[a].push(d.lineGeometry.vertices.length-1)}THREE.Object3D.call(this);var d=this;this.lineGeometry=new THREE.Geometry;this.lineMaterial=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors});this.pointMap={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4",

+ 13 - 7
src/renderers/WebGLRenderer.js

@@ -169,7 +169,9 @@ THREE.WebGLRenderer = function ( parameters ) {
 	// initialize
 
 	var _gl;
+
 	var _glExtensionTextureFloat;
+	var _glExtensionStandardDerivatives;
 	var _glExtensionTextureFilterAnisotropic;
 
 	initGL();
@@ -6525,6 +6527,12 @@ THREE.WebGLRenderer = function ( parameters ) {
 		}
 
 		_glExtensionTextureFloat = _gl.getExtension( 'OES_texture_float' );
+		_glExtensionStandardDerivatives = _gl.getExtension( 'OES_standard_derivatives' );
+
+		_glExtensionTextureFilterAnisotropic = _gl.getExtension( 'EXT_texture_filter_anisotropic' ) ||
+											   _gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) ||
+											   _gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
+
 
 		if ( ! _glExtensionTextureFloat ) {
 
@@ -6532,17 +6540,15 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 		}
 
-		_glExtensionTextureFilterAnisotropic = _gl.getExtension( 'EXT_texture_filter_anisotropic' ) ||
-											   _gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) ||
-											   _gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
-
-		if ( ! _glExtensionTextureFilterAnisotropic ) {
+		if ( ! _glExtensionStandardDerivatives ) {
 
-			console.log( 'THREE.WebGLRenderer: Anisotropic texture filtering not supported.' );
+			console.log( 'THREE.WebGLRenderer: Standard derivatives not supported.' );
 
-		} else {
+		}
 
+		if ( ! _glExtensionTextureFilterAnisotropic ) {
 
+			console.log( 'THREE.WebGLRenderer: Anisotropic texture filtering not supported.' );
 
 		}