فهرست منبع

Updated some examples to the new MeshFaceMaterial usage.

Mr.doob 12 سال پیش
والد
کامیت
2922ff6aeb

+ 3 - 5
build/three.js

@@ -3947,9 +3947,8 @@ THREE.Projector = function() {
 	this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
 
 		var near = camera.near, far = camera.far, visible = false,
-		o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object,
-		modelMatrix,
-		geometry, geometryMaterials, vertices, vertex, vertexPositionScreen,
+		o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object, modelMatrix,
+		geometry, vertices, vertex, vertexPositionScreen,
 		faces, face, faceVertexNormals, normal, faceVertexUvs, uvs,
 		v1, v2, v3, v4, isFaceMaterial, material, side;
 
@@ -3992,7 +3991,6 @@ THREE.Projector = function() {
 				_normalMatrix.transpose();
 
 				isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
-				geometryMaterials = ( isFaceMaterial && object.material.materials.length > 0 ) ? object.material.materials : object.geometry.materials;
 
 				side = object.material.side;
 
@@ -4017,7 +4015,7 @@ THREE.Projector = function() {
 
 					face = faces[ f ];
 
-					material = isFaceMaterial === true ? geometryMaterials[ face.materialIndex ] : object.material;
+					material = isFaceMaterial === true ? object.material.materials[ face.materialIndex ] : object.material;
 
 					if ( material === undefined ) continue;
 

+ 90 - 90
build/three.min.js

@@ -80,17 +80,17 @@ a.matrixWorld.copy(this.matrixWorld);a.matrixRotationWorld.copy(this.matrixRotat
 return a},deallocate:function(){var a=THREE.Object3DLibrary.indexOf(this);-1!==a&&THREE.Object3DLibrary.splice(a,1)}};THREE.Object3D.__m1=new THREE.Matrix4;THREE.Object3D.defaultEulerOrder="XYZ";THREE.Object3DIdCount=0;THREE.Object3DLibrary=[];
 THREE.Projector=function(){function a(){if(f===h){var a=new THREE.RenderableObject;g.push(a);h++;f++;return a}return g[f++]}function b(){if(j===n){var a=new THREE.RenderableVertex;m.push(a);n++;j++;return a}return m[j++]}function c(a,b){return b.z-a.z}function d(a,b){var c=0,d=1,e=a.z+a.w,f=b.z+b.w,g=-a.z+a.w,h=-b.z+b.w;if(0<=e&&0<=f&&0<=g&&0<=h)return!0;if(0>e&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d<
 c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,j,m=[],n=0,l,p,o=[],r=0,t,q=[],z=0,u,s,E=[],A=0,w,v,C=[],D=0,G={objects:[],sprites:[],lights:[],elements:[]},P=new THREE.Vector3,B=new THREE.Vector4,J=new THREE.Matrix4,H=new THREE.Matrix4,I=new THREE.Matrix3,L=new THREE.Frustum,N=new THREE.Vector4,S=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);J.multiply(b.projectionMatrix,b.matrixWorldInverse);J.multiplyVector3(a);return a};
-this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);J.multiply(b.matrixWorld,b.projectionMatrixInverse);J.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,h,n,Q){var Z=h.near,K=h.far,ja=!1,R,ga,fa,V,aa,ca,ia,wa,ua,Ca,Ka,va,db,xb,Ua;v=s=t=p=0;G.elements.length=0;g.updateMatrixWorld();
-void 0===h.parent&&h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);J.multiply(h.projectionMatrix,h.matrixWorldInverse);L.setFromMatrix(J);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var gb=function(b){for(var c=0,d=b.children.length;c<d;c++){var f=b.children[c];if(!1!==f.visible){if(f instanceof THREE.Light)G.lights.push(f);else if(f instanceof THREE.Mesh||f instanceof THREE.Line){if(!1===f.frustumCulled||!0===L.contains(f))e=a(),e.object=f,null!==f.renderDepth?
-e.z=f.renderDepth:(P.copy(f.matrixWorld.getPosition()),J.multiplyVector3(P),e.z=P.z),G.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(P.copy(f.matrixWorld.getPosition()),J.multiplyVector3(P),e.z=P.z),G.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(P.copy(f.matrixWorld.getPosition()),J.multiplyVector3(P),e.z=P.z),G.objects.push(e));gb(f)}}};gb(g);!0===n&&G.objects.sort(c);g=0;for(n=G.objects.length;g<
-n;g++)if(wa=G.objects[g].object,ua=wa.matrixWorld,j=0,wa instanceof THREE.Mesh){Ca=wa.geometry;fa=Ca.vertices;Ka=Ca.faces;db=Ca.faceVertexUvs;I.getInverse(ua);I.transpose();Ca=(xb=wa.material instanceof THREE.MeshFaceMaterial)&&0<wa.material.materials.length?wa.material.materials:wa.geometry.materials;R=0;for(ga=fa.length;R<ga;R++)i=b(),i.positionWorld.copy(fa[R]),ua.multiplyVector3(i.positionWorld),i.positionScreen.copy(i.positionWorld),J.multiplyVector4(i.positionScreen),i.positionScreen.x/=i.positionScreen.w,
-i.positionScreen.y/=i.positionScreen.w,i.visible=i.positionScreen.z>Z&&i.positionScreen.z<K;fa=0;for(R=Ka.length;fa<R;fa++)if(ga=Ka[fa],Ua=!0===xb?Ca[ga.materialIndex]:wa.material,void 0!==Ua){ca=Ua.side;if(ga instanceof THREE.Face3)if(V=m[ga.a],aa=m[ga.b],ia=m[ga.c],!0===V.visible&&!0===aa.visible&&!0===ia.visible)if(ja=0>(ia.positionScreen.x-V.positionScreen.x)*(aa.positionScreen.y-V.positionScreen.y)-(ia.positionScreen.y-V.positionScreen.y)*(aa.positionScreen.x-V.positionScreen.x),ca===THREE.DoubleSide||
-ja===(ca===THREE.FrontSide))p===r?(va=new THREE.RenderableFace3,o.push(va),r++,p++,l=va):l=o[p++],l.v1.copy(V),l.v2.copy(aa),l.v3.copy(ia);else continue;else continue;else if(ga instanceof THREE.Face4)if(V=m[ga.a],aa=m[ga.b],ia=m[ga.c],va=m[ga.d],!0===V.visible&&!0===aa.visible&&!0===ia.visible&&!0===va.visible)if(ja=0>(va.positionScreen.x-V.positionScreen.x)*(aa.positionScreen.y-V.positionScreen.y)-(va.positionScreen.y-V.positionScreen.y)*(aa.positionScreen.x-V.positionScreen.x)||0>(aa.positionScreen.x-
-ia.positionScreen.x)*(va.positionScreen.y-ia.positionScreen.y)-(aa.positionScreen.y-ia.positionScreen.y)*(va.positionScreen.x-ia.positionScreen.x),ca===THREE.DoubleSide||ja===(ca===THREE.FrontSide)){if(t===z){var lb=new THREE.RenderableFace4;q.push(lb);z++;t++;l=lb}else l=q[t++];l.v1.copy(V);l.v2.copy(aa);l.v3.copy(ia);l.v4.copy(va)}else continue;else continue;l.normalWorld.copy(ga.normal);!1===ja&&(ca===THREE.BackSide||ca===THREE.DoubleSide)&&l.normalWorld.negate();I.multiplyVector3(l.normalWorld).normalize();
-l.centroidWorld.copy(ga.centroid);ua.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld);J.multiplyVector3(l.centroidScreen);ia=ga.vertexNormals;V=0;for(aa=ia.length;V<aa;V++)va=l.vertexNormalsWorld[V],va.copy(ia[V]),!1===ja&&(ca===THREE.BackSide||ca===THREE.DoubleSide)&&va.negate(),I.multiplyVector3(va).normalize();l.vertexNormalsLength=ia.length;V=0;for(aa=db.length;V<aa;V++)if(va=db[V][fa],void 0!==va){ca=0;for(ia=va.length;ca<ia;ca++)l.uvs[V][ca]=va[ca]}l.color=ga.color;l.material=
-Ua;l.z=l.centroidScreen.z;G.elements.push(l)}}else if(wa instanceof THREE.Line){H.multiply(J,ua);fa=wa.geometry.vertices;V=b();V.positionScreen.copy(fa[0]);H.multiplyVector4(V.positionScreen);ua=wa.type===THREE.LinePieces?2:1;R=1;for(ga=fa.length;R<ga;R++)V=b(),V.positionScreen.copy(fa[R]),H.multiplyVector4(V.positionScreen),0<(R+1)%ua||(aa=m[j-2],N.copy(V.positionScreen),S.copy(aa.positionScreen),!0===d(N,S)&&(N.multiplyScalar(1/N.w),S.multiplyScalar(1/S.w),s===A?(Ka=new THREE.RenderableLine,E.push(Ka),
-A++,s++,u=Ka):u=E[s++],u.v1.positionScreen.copy(N),u.v2.positionScreen.copy(S),u.z=Math.max(N.z,S.z),u.material=wa.material,G.elements.push(u)))}g=0;for(n=G.sprites.length;g<n;g++)wa=G.sprites[g].object,ua=wa.matrixWorld,wa instanceof THREE.Particle&&(B.set(ua.elements[12],ua.elements[13],ua.elements[14],1),J.multiplyVector4(B),B.z/=B.w,0<B.z&&1>B.z&&(v===D?(Z=new THREE.RenderableParticle,C.push(Z),D++,v++,w=Z):w=C[v++],w.object=wa,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=wa.rotation.z,w.scale.x=
-wa.scale.x*Math.abs(w.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),w.scale.y=wa.scale.y*Math.abs(w.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=wa.material,G.elements.push(w)));!0===Q&&G.elements.sort(c);return G}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};
+this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);J.multiply(b.matrixWorld,b.projectionMatrixInverse);J.multiplyVector3(a);return a};this.pickingRay=function(a,b){var c;a.z=-1;c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.subSelf(a).normalize();return new THREE.Ray(a,c)};this.projectScene=function(g,h,n,Q){var Z=h.near,K=h.far,ja=!1,R,ga,fa,V,aa,ca,ia,Aa,ua,Ba,Ka,va,eb,Ya;v=s=t=p=0;G.elements.length=0;g.updateMatrixWorld();
+void 0===h.parent&&h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);J.multiply(h.projectionMatrix,h.matrixWorldInverse);L.setFromMatrix(J);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var kb=function(b){for(var c=0,d=b.children.length;c<d;c++){var f=b.children[c];if(!1!==f.visible){if(f instanceof THREE.Light)G.lights.push(f);else if(f instanceof THREE.Mesh||f instanceof THREE.Line){if(!1===f.frustumCulled||!0===L.contains(f))e=a(),e.object=f,null!==f.renderDepth?
+e.z=f.renderDepth:(P.copy(f.matrixWorld.getPosition()),J.multiplyVector3(P),e.z=P.z),G.objects.push(e)}else f instanceof THREE.Sprite||f instanceof THREE.Particle?(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(P.copy(f.matrixWorld.getPosition()),J.multiplyVector3(P),e.z=P.z),G.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(P.copy(f.matrixWorld.getPosition()),J.multiplyVector3(P),e.z=P.z),G.objects.push(e));kb(f)}}};kb(g);!0===n&&G.objects.sort(c);g=0;for(n=G.objects.length;g<
+n;g++)if(Aa=G.objects[g].object,ua=Aa.matrixWorld,j=0,Aa instanceof THREE.Mesh){Ba=Aa.geometry;fa=Ba.vertices;Ka=Ba.faces;Ba=Ba.faceVertexUvs;I.getInverse(ua);I.transpose();eb=Aa.material instanceof THREE.MeshFaceMaterial;R=0;for(ga=fa.length;R<ga;R++)i=b(),i.positionWorld.copy(fa[R]),ua.multiplyVector3(i.positionWorld),i.positionScreen.copy(i.positionWorld),J.multiplyVector4(i.positionScreen),i.positionScreen.x/=i.positionScreen.w,i.positionScreen.y/=i.positionScreen.w,i.visible=i.positionScreen.z>
+Z&&i.positionScreen.z<K;fa=0;for(R=Ka.length;fa<R;fa++)if(ga=Ka[fa],Ya=!0===eb?Aa.material.materials[ga.materialIndex]:Aa.material,void 0!==Ya){ca=Ya.side;if(ga instanceof THREE.Face3)if(V=m[ga.a],aa=m[ga.b],ia=m[ga.c],!0===V.visible&&!0===aa.visible&&!0===ia.visible)if(ja=0>(ia.positionScreen.x-V.positionScreen.x)*(aa.positionScreen.y-V.positionScreen.y)-(ia.positionScreen.y-V.positionScreen.y)*(aa.positionScreen.x-V.positionScreen.x),ca===THREE.DoubleSide||ja===(ca===THREE.FrontSide))p===r?(va=
+new THREE.RenderableFace3,o.push(va),r++,p++,l=va):l=o[p++],l.v1.copy(V),l.v2.copy(aa),l.v3.copy(ia);else continue;else continue;else if(ga instanceof THREE.Face4)if(V=m[ga.a],aa=m[ga.b],ia=m[ga.c],va=m[ga.d],!0===V.visible&&!0===aa.visible&&!0===ia.visible&&!0===va.visible)if(ja=0>(va.positionScreen.x-V.positionScreen.x)*(aa.positionScreen.y-V.positionScreen.y)-(va.positionScreen.y-V.positionScreen.y)*(aa.positionScreen.x-V.positionScreen.x)||0>(aa.positionScreen.x-ia.positionScreen.x)*(va.positionScreen.y-
+ia.positionScreen.y)-(aa.positionScreen.y-ia.positionScreen.y)*(va.positionScreen.x-ia.positionScreen.x),ca===THREE.DoubleSide||ja===(ca===THREE.FrontSide)){if(t===z){var gb=new THREE.RenderableFace4;q.push(gb);z++;t++;l=gb}else l=q[t++];l.v1.copy(V);l.v2.copy(aa);l.v3.copy(ia);l.v4.copy(va)}else continue;else continue;l.normalWorld.copy(ga.normal);!1===ja&&(ca===THREE.BackSide||ca===THREE.DoubleSide)&&l.normalWorld.negate();I.multiplyVector3(l.normalWorld).normalize();l.centroidWorld.copy(ga.centroid);
+ua.multiplyVector3(l.centroidWorld);l.centroidScreen.copy(l.centroidWorld);J.multiplyVector3(l.centroidScreen);ia=ga.vertexNormals;V=0;for(aa=ia.length;V<aa;V++)va=l.vertexNormalsWorld[V],va.copy(ia[V]),!1===ja&&(ca===THREE.BackSide||ca===THREE.DoubleSide)&&va.negate(),I.multiplyVector3(va).normalize();l.vertexNormalsLength=ia.length;V=0;for(aa=Ba.length;V<aa;V++)if(va=Ba[V][fa],void 0!==va){ca=0;for(ia=va.length;ca<ia;ca++)l.uvs[V][ca]=va[ca]}l.color=ga.color;l.material=Ya;l.z=l.centroidScreen.z;
+G.elements.push(l)}}else if(Aa instanceof THREE.Line){H.multiply(J,ua);fa=Aa.geometry.vertices;V=b();V.positionScreen.copy(fa[0]);H.multiplyVector4(V.positionScreen);ua=Aa.type===THREE.LinePieces?2:1;R=1;for(ga=fa.length;R<ga;R++)V=b(),V.positionScreen.copy(fa[R]),H.multiplyVector4(V.positionScreen),0<(R+1)%ua||(aa=m[j-2],N.copy(V.positionScreen),S.copy(aa.positionScreen),!0===d(N,S)&&(N.multiplyScalar(1/N.w),S.multiplyScalar(1/S.w),s===A?(Ka=new THREE.RenderableLine,E.push(Ka),A++,s++,u=Ka):u=E[s++],
+u.v1.positionScreen.copy(N),u.v2.positionScreen.copy(S),u.z=Math.max(N.z,S.z),u.material=Aa.material,G.elements.push(u)))}g=0;for(n=G.sprites.length;g<n;g++)Aa=G.sprites[g].object,ua=Aa.matrixWorld,Aa instanceof THREE.Particle&&(B.set(ua.elements[12],ua.elements[13],ua.elements[14],1),J.multiplyVector4(B),B.z/=B.w,0<B.z&&1>B.z&&(v===D?(Z=new THREE.RenderableParticle,C.push(Z),D++,v++,w=Z):w=C[v++],w.object=Aa,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=Aa.rotation.z,w.scale.x=Aa.scale.x*Math.abs(w.x-
+(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),w.scale.y=Aa.scale.y*Math.abs(w.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=Aa.material,G.elements.push(w)));!0===Q&&G.elements.sort(c);return G}};THREE.Quaternion=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1};
 THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a,b){var c=Math.cos(a.x/2),d=Math.cos(a.y/2),e=Math.cos(a.z/2),f=Math.sin(a.x/2),g=Math.sin(a.y/2),h=Math.sin(a.z/2);void 0===b||"XYZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"YXZ"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*
 h-f*g*e,this.w=c*d*e+f*g*h):"ZXY"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e-f*g*h):"ZYX"===b?(this.x=f*d*e-c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e+f*g*h):"YZX"===b?(this.x=f*d*e+c*g*h,this.y=c*g*e+f*d*h,this.z=c*d*h-f*g*e,this.w=c*d*e-f*g*h):"XZY"===b&&(this.x=f*d*e-c*g*h,this.y=c*g*e-f*d*h,this.z=c*d*h+f*g*e,this.w=c*d*e+f*g*h);return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c);this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);
 return this},setFromRotationMatrix:function(a){var b=a.elements,c=b[0],a=b[4],d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],i=b[6],b=b[10],j=c+f+b;0<j?(c=0.5/Math.sqrt(j+1),this.w=0.25/c,this.x=(i-g)*c,this.y=(d-h)*c,this.z=(e-a)*c):c>f&&c>b?(c=2*Math.sqrt(1+c-f-b),this.w=(i-g)/c,this.x=0.25*c,this.y=(a+e)/c,this.z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this.w=(d-h)/c,this.x=(a+e)/c,this.y=0.25*c,this.z=(g+i)/c):(c=2*Math.sqrt(1+b-c-f),this.w=(e-a)/c,this.x=(d+h)/c,this.y=(g+i)/c,this.z=0.25*c);return this},inverse:function(){this.conjugate().normalize();
@@ -278,34 +278,34 @@ THREE.Scene.prototype.__addObject=function(a){if(a instanceof THREE.Light)-1===t
 THREE.Scene.prototype.__removeObject=function(a){if(a instanceof THREE.Light){var b=this.__lights.indexOf(a);-1!==b&&this.__lights.splice(b,1)}else a instanceof THREE.Camera||(b=this.__objects.indexOf(a),-1!==b&&(this.__objects.splice(b,1),this.__objectsRemoved.push(a),b=this.__objectsAdded.indexOf(a),-1!==b&&this.__objectsAdded.splice(b,1)));for(b=0;b<a.children.length;b++)this.__removeObject(a.children[b])};
 THREE.Fog=function(a,b,c){this.name="";this.color=new THREE.Color(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3};THREE.Fog.prototype.clone=function(){return new THREE.Fog(this.color.getHex(),this.near,this.far)};THREE.FogExp2=function(a,b){this.name="";this.color=new THREE.Color(a);this.density=void 0!==b?b:2.5E-4};THREE.FogExp2.prototype.clone=function(){return new THREE.FogExp2(this.color.getHex(),this.density)};
 THREE.CanvasRenderer=function(a){function b(a){z!==a&&(z=r.globalAlpha=a)}function c(a){u!==a&&(a===THREE.NormalBlending?r.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?r.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(r.globalCompositeOperation="darker"),u=a)}function d(a){s!==a&&(s=r.strokeStyle=a)}function e(a){E!==a&&(E=r.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,i,j=new THREE.Projector,m=void 0!==a.canvas?a.canvas:
-document.createElement("canvas"),n,l,p,o,r=m.getContext("2d"),t=new THREE.Color(0),q=0,z=1,u=0,s=null,E=null,A=null,w=null,v=null,C,D,G,P,B=new THREE.RenderableVertex,J=new THREE.RenderableVertex,H,I,L,N,S,U,M,O,Q,Z,K,ja,R=new THREE.Color,ga=new THREE.Color,fa=new THREE.Color,V=new THREE.Color,aa=new THREE.Color,ca=new THREE.Color,ia=new THREE.Color,wa={},ua={},Ca,Ka,va,db,xb,Ua,gb,lb,Ab,Bb,fb=new THREE.Rectangle,xa=new THREE.Rectangle,La=new THREE.Rectangle,mb=!1,Na=new THREE.Color,Za=new THREE.Color,
-eb=new THREE.Color,ka=new THREE.Vector3,$a,ab,nb,ta,hb,qb,a=16;$a=document.createElement("canvas");$a.width=$a.height=2;ab=$a.getContext("2d");ab.fillStyle="rgba(0,0,0,1)";ab.fillRect(0,0,2,2);nb=ab.getImageData(0,0,2,2);ta=nb.data;hb=document.createElement("canvas");hb.width=hb.height=a;qb=hb.getContext("2d");qb.translate(-a/2,-a/2);qb.scale(a,a);a--;this.domElement=m;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;l=b;p=
-Math.floor(n/2);o=Math.floor(l/2);m.width=n;m.height=l;fb.set(-p,-o,p,o);xa.set(-p,-o,p,o);z=1;u=0;v=w=A=E=s=null};this.setClearColor=function(a,b){t.copy(a);q=void 0!==b?b:1;xa.set(-p,-o,p,o)};this.setClearColorHex=function(a,b){t.setHex(a);q=void 0!==b?b:1;xa.set(-p,-o,p,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){r.setTransform(1,0,0,-1,p,o);!1===xa.isEmpty()&&(xa.minSelf(fb),xa.inflate(2),1>q&&r.clearRect(Math.floor(xa.getX()),Math.floor(xa.getY()),Math.floor(xa.getWidth()),
-Math.floor(xa.getHeight())),0<q&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+q+")"),r.fillRect(Math.floor(xa.getX()),Math.floor(xa.getY()),Math.floor(xa.getWidth()),Math.floor(xa.getHeight()))),xa.empty())};this.render=function(a,l){function m(a,b,c){for(var d=0,e=i.length;d<e;d++){var f=i[d],g=f.color;if(f instanceof THREE.DirectionalLight){var h=f.matrixWorld.getPosition().normalize(),k=b.dot(h);0>=k||(k*=f.intensity,c.r+=g.r*k,
+document.createElement("canvas"),n,l,p,o,r=m.getContext("2d"),t=new THREE.Color(0),q=0,z=1,u=0,s=null,E=null,A=null,w=null,v=null,C,D,G,P,B=new THREE.RenderableVertex,J=new THREE.RenderableVertex,H,I,L,N,S,U,M,O,Q,Z,K,ja,R=new THREE.Color,ga=new THREE.Color,fa=new THREE.Color,V=new THREE.Color,aa=new THREE.Color,ca=new THREE.Color,ia=new THREE.Color,Aa={},ua={},Ba,Ka,va,eb,Ya,kb,gb,zb,Ab,Bb,fb=new THREE.Rectangle,wa=new THREE.Rectangle,La=new THREE.Rectangle,lb=!1,Na=new THREE.Color,Za=new THREE.Color,
+db=new THREE.Color,ka=new THREE.Vector3,$a,ab,mb,ta,nb,qb,a=16;$a=document.createElement("canvas");$a.width=$a.height=2;ab=$a.getContext("2d");ab.fillStyle="rgba(0,0,0,1)";ab.fillRect(0,0,2,2);mb=ab.getImageData(0,0,2,2);ta=mb.data;nb=document.createElement("canvas");nb.width=nb.height=a;qb=nb.getContext("2d");qb.translate(-a/2,-a/2);qb.scale(a,a);a--;this.domElement=m;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;l=b;p=
+Math.floor(n/2);o=Math.floor(l/2);m.width=n;m.height=l;fb.set(-p,-o,p,o);wa.set(-p,-o,p,o);z=1;u=0;v=w=A=E=s=null};this.setClearColor=function(a,b){t.copy(a);q=void 0!==b?b:1;wa.set(-p,-o,p,o)};this.setClearColorHex=function(a,b){t.setHex(a);q=void 0!==b?b:1;wa.set(-p,-o,p,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){r.setTransform(1,0,0,-1,p,o);!1===wa.isEmpty()&&(wa.minSelf(fb),wa.inflate(2),1>q&&r.clearRect(Math.floor(wa.getX()),Math.floor(wa.getY()),Math.floor(wa.getWidth()),
+Math.floor(wa.getHeight())),0<q&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+q+")"),r.fillRect(Math.floor(wa.getX()),Math.floor(wa.getY()),Math.floor(wa.getWidth()),Math.floor(wa.getHeight()))),wa.empty())};this.render=function(a,l){function m(a,b,c){for(var d=0,e=i.length;d<e;d++){var f=i[d],g=f.color;if(f instanceof THREE.DirectionalLight){var h=f.matrixWorld.getPosition().normalize(),k=b.dot(h);0>=k||(k*=f.intensity,c.r+=g.r*k,
 c.g+=g.g*k,c.b+=g.b*k)}else f instanceof THREE.PointLight&&(h=f.matrixWorld.getPosition(),k=b.dot(ka.sub(h,a).normalize()),0>=k||(k*=0==f.distance?1:1-Math.min(a.distanceTo(h)/f.distance,1),0!=k&&(k*=f.intensity,c.r+=g.r*k,c.g+=g.g*k,c.b+=g.b*k)))}}function n(a,d,e,g,h,k,i,j){f.info.render.vertices+=3;f.info.render.faces++;b(j.opacity);c(j.blending);H=a.positionScreen.x;I=a.positionScreen.y;L=d.positionScreen.x;N=d.positionScreen.y;S=e.positionScreen.x;U=e.positionScreen.y;q(H,I,L,N,S,U);(j instanceof
-THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(ca.copy(j.color),ia.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(ca.r*=i.color.r,ca.g*=i.color.g,ca.b*=i.color.b),!0===mb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ga.r=fa.r=V.r=Na.r,ga.g=fa.g=V.g=Na.g,ga.b=fa.b=V.b=Na.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ga),m(i.v2.positionWorld,i.vertexNormalsWorld[1],fa),m(i.v3.positionWorld,i.vertexNormalsWorld[2],
+THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(ca.copy(j.color),ia.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(ca.r*=i.color.r,ca.g*=i.color.g,ca.b*=i.color.b),!0===lb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ga.r=fa.r=V.r=Na.r,ga.g=fa.g=V.g=Na.g,ga.b=fa.b=V.b=Na.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ga),m(i.v2.positionWorld,i.vertexNormalsWorld[1],fa),m(i.v3.positionWorld,i.vertexNormalsWorld[2],
 V),ga.r=ga.r*ca.r+ia.r,ga.g=ga.g*ca.g+ia.g,ga.b=ga.b*ca.b+ia.b,fa.r=fa.r*ca.r+ia.r,fa.g=fa.g*ca.g+ia.g,fa.b=fa.b*ca.b+ia.b,V.r=V.r*ca.r+ia.r,V.g=V.g*ca.g+ia.g,V.b=V.b*ca.b+ia.b,aa.r=0.5*(fa.r+V.r),aa.g=0.5*(fa.g+V.g),aa.b=0.5*(fa.b+V.b),va=wc(ga,fa,V,aa),ma(H,I,L,N,S,U,0,0,1,0,0,1,va)):(R.r=Na.r,R.g=Na.g,R.b=Na.b,m(i.centroidWorld,i.normalWorld,R),R.r=R.r*ca.r+ia.r,R.g=R.g*ca.g+ia.g,R.b=R.b*ca.b+ia.b,!0===j.wireframe?s(R,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(R)):!0===j.wireframe?
-s(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(db=i.uvs[0],z(H,I,L,N,S,U,db[g].u,db[g].v,db[h].u,db[h].v,db[k].u,db[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,ka.copy(i.vertexNormalsWorld[g]),xb=0.5*(ka.x*a.elements[0]+ka.y*
-a.elements[4]+ka.z*a.elements[8])+0.5,Ua=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[h]),gb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,lb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[k]),Ab=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,Bb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,z(H,I,L,N,S,U,xb,Ua,gb,lb,Ab,Bb,j.envMap)):(R.copy(j.color),
-j.vertexColors===THREE.FaceColors&&(R.r*=i.color.r,R.g*=i.color.g,R.b*=i.color.b),!0===j.wireframe?s(R,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(R)):j instanceof THREE.MeshDepthMaterial?(Ca=l.near,Ka=l.far,ga.r=ga.g=ga.b=1-Cb(a.positionScreen.z,Ca,Ka),fa.r=fa.g=fa.b=1-Cb(d.positionScreen.z,Ca,Ka),V.r=V.g=V.b=1-Cb(e.positionScreen.z,Ca,Ka),aa.r=0.5*(fa.r+V.r),aa.g=0.5*(fa.g+V.g),aa.b=0.5*(fa.b+V.b),va=wc(ga,fa,V,aa),ma(H,I,L,N,S,U,0,0,1,0,0,1,va)):j instanceof THREE.MeshNormalMaterial&&
+s(j.color,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(j.color):j instanceof THREE.MeshBasicMaterial||j instanceof THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial?null!==j.map?j.map.mapping instanceof THREE.UVMapping&&(eb=i.uvs[0],z(H,I,L,N,S,U,eb[g].u,eb[g].v,eb[h].u,eb[h].v,eb[k].u,eb[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,ka.copy(i.vertexNormalsWorld[g]),Ya=0.5*(ka.x*a.elements[0]+ka.y*
+a.elements[4]+ka.z*a.elements[8])+0.5,kb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[h]),gb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,zb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[k]),Ab=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,Bb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,z(H,I,L,N,S,U,Ya,kb,gb,zb,Ab,Bb,j.envMap)):(R.copy(j.color),
+j.vertexColors===THREE.FaceColors&&(R.r*=i.color.r,R.g*=i.color.g,R.b*=i.color.b),!0===j.wireframe?s(R,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(R)):j instanceof THREE.MeshDepthMaterial?(Ba=l.near,Ka=l.far,ga.r=ga.g=ga.b=1-Cb(a.positionScreen.z,Ba,Ka),fa.r=fa.g=fa.b=1-Cb(d.positionScreen.z,Ba,Ka),V.r=V.g=V.b=1-Cb(e.positionScreen.z,Ba,Ka),aa.r=0.5*(fa.r+V.r),aa.g=0.5*(fa.g+V.g),aa.b=0.5*(fa.b+V.b),va=wc(ga,fa,V,aa),ma(H,I,L,N,S,U,0,0,1,0,0,1,va)):j instanceof THREE.MeshNormalMaterial&&
 (R.r=gc(i.normalWorld.x),R.g=gc(i.normalWorld.y),R.b=gc(i.normalWorld.z),!0===j.wireframe?s(R,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(R))}function q(a,b,c,d,e,f){r.beginPath();r.moveTo(a,b);r.lineTo(c,d);r.lineTo(e,f);r.closePath()}function t(a,b,c,d,e,f,g,h){r.beginPath();r.moveTo(a,b);r.lineTo(c,d);r.lineTo(e,f);r.lineTo(g,h);r.closePath()}function s(a,b,c,e){A!==b&&(A=r.lineWidth=b);w!==c&&(w=r.lineCap=c);v!==e&&(v=r.lineJoin=e);d(a.getContextStyle());r.stroke();La.inflate(2*
-b)}function u(a){e(a.getContextStyle());r.fill()}function z(a,b,c,d,f,g,h,k,i,j,l,m,ma){if(!(ma instanceof THREE.DataTexture||void 0===ma.image||0==ma.image.width)){if(!0===ma.needsUpdate){var n=ma.wrapS==THREE.RepeatWrapping,o=ma.wrapT==THREE.RepeatWrapping;wa[ma.id]=r.createPattern(ma.image,!0===n&&!0===o?"repeat":!0===n&&!1===o?"repeat-x":!1===n&&!0===o?"repeat-y":"no-repeat");ma.needsUpdate=!1}void 0===wa[ma.id]?e("rgba(0,0,0,1)"):e(wa[ma.id]);var n=ma.offset.x/ma.repeat.x,o=ma.offset.y/ma.repeat.y,
+b)}function u(a){e(a.getContextStyle());r.fill()}function z(a,b,c,d,f,g,h,k,i,j,l,m,ma){if(!(ma instanceof THREE.DataTexture||void 0===ma.image||0==ma.image.width)){if(!0===ma.needsUpdate){var n=ma.wrapS==THREE.RepeatWrapping,o=ma.wrapT==THREE.RepeatWrapping;Aa[ma.id]=r.createPattern(ma.image,!0===n&&!0===o?"repeat":!0===n&&!1===o?"repeat-x":!1===n&&!0===o?"repeat-y":"no-repeat");ma.needsUpdate=!1}void 0===Aa[ma.id]?e("rgba(0,0,0,1)"):e(Aa[ma.id]);var n=ma.offset.x/ma.repeat.x,o=ma.offset.y/ma.repeat.y,
 Cb=ma.image.width*ma.repeat.x,p=ma.image.height*ma.repeat.y,h=(h+n)*Cb,k=(1-k+o)*p,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+n)*Cb-h,j=(1-j+o)*p-k,l=(l+n)*Cb-h,m=(1-m+o)*p-k,n=i*m-l*j;0===n?(void 0===ua[ma.id]&&(b=document.createElement("canvas"),b.width=ma.image.width,b.height=ma.image.height,b=b.getContext("2d"),b.drawImage(ma.image,0,0),ua[ma.id]=b.getImageData(0,0,ma.image.width,ma.image.height).data),b=ua[ma.id],h=4*(Math.floor(h)+Math.floor(k)*ma.image.width),R.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),u(R)):
 (n=1/n,ma=(m*c-j*f)*n,j=(m*d-j*g)*n,c=(i*f-l*c)*n,d=(i*g-l*d)*n,a=a-ma*h-c*k,h=b-j*h-d*k,r.save(),r.transform(ma,j,c,d,a,h),r.fill(),r.restore())}}function ma(a,b,c,d,e,f,g,h,k,i,j,l,m){var ma,n;ma=m.width-1;n=m.height-1;g*=ma;h*=n;c-=a;d-=b;e-=a;f-=b;k=k*ma-g;i=i*n-h;j=j*ma-g;l=l*n-h;n=1/(k*l-j*i);ma=(l*c-i*e)*n;i=(l*d-i*f)*n;c=(k*e-j*c)*n;d=(k*f-j*d)*n;a=a-ma*g-c*h;b=b-i*g-d*h;r.save();r.transform(ma,i,c,d,a,b);r.clip();r.drawImage(m,0,0);r.restore()}function wc(a,b,c,d){ta[0]=255*a.r|0;ta[1]=255*
-a.g|0;ta[2]=255*a.b|0;ta[4]=255*b.r|0;ta[5]=255*b.g|0;ta[6]=255*b.b|0;ta[8]=255*c.r|0;ta[9]=255*c.g|0;ta[10]=255*c.b|0;ta[12]=255*d.r|0;ta[13]=255*d.g|0;ta[14]=255*d.b|0;ab.putImageData(nb,0,0);qb.drawImage($a,0,0);return hb}function Cb(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function gc(a){a=0.5*(a+1);return 0>a?0:1<a?1:a}function Xb(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===l instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");
-else{var Yb,xc,na,da;!0===this.autoClear?this.clear():r.setTransform(1,0,0,-1,p,o);f.info.render.vertices=0;f.info.render.faces=0;g=j.projectScene(a,l,this.sortObjects,this.sortElements);h=g.elements;i=g.lights;mb=0<i.length;if(!0===mb){Na.setRGB(0,0,0);Za.setRGB(0,0,0);eb.setRGB(0,0,0);Yb=0;for(xc=i.length;Yb<xc;Yb++){da=i[Yb];var oa=da.color;da instanceof THREE.AmbientLight?(Na.r+=oa.r,Na.g+=oa.g,Na.b+=oa.b):da instanceof THREE.DirectionalLight?(Za.r+=oa.r,Za.g+=oa.g,Za.b+=oa.b):da instanceof THREE.PointLight&&
-(eb.r+=oa.r,eb.g+=oa.g,eb.b+=oa.b)}}Yb=0;for(xc=h.length;Yb<xc;Yb++)if(na=h[Yb],da=na.material,!(void 0===da||!1===da.visible)){La.empty();if(na instanceof THREE.RenderableParticle){C=na;C.x*=p;C.y*=o;var oa=C,bb=na;b(da.opacity);c(da.blending);var E=void 0,zb=void 0,rb=void 0,sb=void 0,hc=na=void 0,Pc=void 0;da instanceof THREE.ParticleBasicMaterial?null===da.map?(rb=bb.object.scale.x,sb=bb.object.scale.y,rb*=bb.scale.x*p,sb*=bb.scale.y*o,La.set(oa.x-rb,oa.y-sb,oa.x+rb,oa.y+sb),!1!==fb.intersects(La)&&
-(e(da.color.getContextStyle()),r.save(),r.translate(oa.x,oa.y),r.rotate(-bb.rotation),r.scale(rb,sb),r.fillRect(-1,-1,2,2),r.restore())):(na=da.map.image,hc=na.width>>1,Pc=na.height>>1,rb=bb.scale.x*p,sb=bb.scale.y*o,E=rb*hc,zb=sb*Pc,La.set(oa.x-E,oa.y-zb,oa.x+E,oa.y+zb),!1!==fb.intersects(La)&&(r.save(),r.translate(oa.x,oa.y),r.rotate(-bb.rotation),r.scale(rb,-sb),r.translate(-hc,-Pc),r.drawImage(na,0,0),r.restore())):da instanceof THREE.ParticleCanvasMaterial&&(E=bb.scale.x*p,zb=bb.scale.y*o,La.set(oa.x-
-E,oa.y-zb,oa.x+E,oa.y+zb),!1!==fb.intersects(La)&&(d(da.color.getContextStyle()),e(da.color.getContextStyle()),r.save(),r.translate(oa.x,oa.y),r.rotate(-bb.rotation),r.scale(E,zb),da.program(r),r.restore()))}else if(na instanceof THREE.RenderableLine){if(C=na.v1,D=na.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=o,La.addPoint(C.positionScreen.x,C.positionScreen.y),La.addPoint(D.positionScreen.x,D.positionScreen.y),!0===fb.intersects(La)&&(oa=C,bb=D,b(da.opacity),
+a.g|0;ta[2]=255*a.b|0;ta[4]=255*b.r|0;ta[5]=255*b.g|0;ta[6]=255*b.b|0;ta[8]=255*c.r|0;ta[9]=255*c.g|0;ta[10]=255*c.b|0;ta[12]=255*d.r|0;ta[13]=255*d.g|0;ta[14]=255*d.b|0;ab.putImageData(mb,0,0);qb.drawImage($a,0,0);return nb}function Cb(a,b,c){a=(a-b)/(c-b);return a*a*(3-2*a)}function gc(a){a=0.5*(a+1);return 0>a?0:1<a?1:a}function Xb(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===l instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");
+else{var Yb,xc,na,da;!0===this.autoClear?this.clear():r.setTransform(1,0,0,-1,p,o);f.info.render.vertices=0;f.info.render.faces=0;g=j.projectScene(a,l,this.sortObjects,this.sortElements);h=g.elements;i=g.lights;lb=0<i.length;if(!0===lb){Na.setRGB(0,0,0);Za.setRGB(0,0,0);db.setRGB(0,0,0);Yb=0;for(xc=i.length;Yb<xc;Yb++){da=i[Yb];var oa=da.color;da instanceof THREE.AmbientLight?(Na.r+=oa.r,Na.g+=oa.g,Na.b+=oa.b):da instanceof THREE.DirectionalLight?(Za.r+=oa.r,Za.g+=oa.g,Za.b+=oa.b):da instanceof THREE.PointLight&&
+(db.r+=oa.r,db.g+=oa.g,db.b+=oa.b)}}Yb=0;for(xc=h.length;Yb<xc;Yb++)if(na=h[Yb],da=na.material,!(void 0===da||!1===da.visible)){La.empty();if(na instanceof THREE.RenderableParticle){C=na;C.x*=p;C.y*=o;var oa=C,bb=na;b(da.opacity);c(da.blending);var E=void 0,yb=void 0,rb=void 0,sb=void 0,hc=na=void 0,Pc=void 0;da instanceof THREE.ParticleBasicMaterial?null===da.map?(rb=bb.object.scale.x,sb=bb.object.scale.y,rb*=bb.scale.x*p,sb*=bb.scale.y*o,La.set(oa.x-rb,oa.y-sb,oa.x+rb,oa.y+sb),!1!==fb.intersects(La)&&
+(e(da.color.getContextStyle()),r.save(),r.translate(oa.x,oa.y),r.rotate(-bb.rotation),r.scale(rb,sb),r.fillRect(-1,-1,2,2),r.restore())):(na=da.map.image,hc=na.width>>1,Pc=na.height>>1,rb=bb.scale.x*p,sb=bb.scale.y*o,E=rb*hc,yb=sb*Pc,La.set(oa.x-E,oa.y-yb,oa.x+E,oa.y+yb),!1!==fb.intersects(La)&&(r.save(),r.translate(oa.x,oa.y),r.rotate(-bb.rotation),r.scale(rb,-sb),r.translate(-hc,-Pc),r.drawImage(na,0,0),r.restore())):da instanceof THREE.ParticleCanvasMaterial&&(E=bb.scale.x*p,yb=bb.scale.y*o,La.set(oa.x-
+E,oa.y-yb,oa.x+E,oa.y+yb),!1!==fb.intersects(La)&&(d(da.color.getContextStyle()),e(da.color.getContextStyle()),r.save(),r.translate(oa.x,oa.y),r.rotate(-bb.rotation),r.scale(E,yb),da.program(r),r.restore()))}else if(na instanceof THREE.RenderableLine){if(C=na.v1,D=na.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=o,La.addPoint(C.positionScreen.x,C.positionScreen.y),La.addPoint(D.positionScreen.x,D.positionScreen.y),!0===fb.intersects(La)&&(oa=C,bb=D,b(da.opacity),
 c(da.blending),r.beginPath(),r.moveTo(oa.positionScreen.x,oa.positionScreen.y),r.lineTo(bb.positionScreen.x,bb.positionScreen.y),da instanceof THREE.LineBasicMaterial))oa=da.linewidth,A!==oa&&(A=r.lineWidth=oa),oa=da.linecap,w!==oa&&(w=r.lineCap=oa),oa=da.linejoin,v!==oa&&(v=r.lineJoin=oa),d(da.color.getContextStyle()),r.stroke(),La.inflate(2*da.linewidth)}else if(na instanceof THREE.RenderableFace3)C=na.v1,D=na.v2,G=na.v3,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=
 o,G.positionScreen.x*=p,G.positionScreen.y*=o,!0===da.overdraw&&(Xb(C.positionScreen,D.positionScreen),Xb(D.positionScreen,G.positionScreen),Xb(G.positionScreen,C.positionScreen)),La.add3Points(C.positionScreen.x,C.positionScreen.y,D.positionScreen.x,D.positionScreen.y,G.positionScreen.x,G.positionScreen.y),!0===fb.intersects(La)&&n(C,D,G,0,1,2,na,da,a);else if(na instanceof THREE.RenderableFace4&&(C=na.v1,D=na.v2,G=na.v3,P=na.v4,C.positionScreen.x*=p,C.positionScreen.y*=o,D.positionScreen.x*=p,D.positionScreen.y*=
 o,G.positionScreen.x*=p,G.positionScreen.y*=o,P.positionScreen.x*=p,P.positionScreen.y*=o,B.positionScreen.copy(D.positionScreen),J.positionScreen.copy(P.positionScreen),!0===da.overdraw&&(Xb(C.positionScreen,D.positionScreen),Xb(D.positionScreen,P.positionScreen),Xb(P.positionScreen,C.positionScreen),Xb(G.positionScreen,B.positionScreen),Xb(G.positionScreen,J.positionScreen)),La.addPoint(C.positionScreen.x,C.positionScreen.y),La.addPoint(D.positionScreen.x,D.positionScreen.y),La.addPoint(G.positionScreen.x,
-G.positionScreen.y),La.addPoint(P.positionScreen.x,P.positionScreen.y),!0===fb.intersects(La)))(oa=C,bb=D,E=G,zb=P,rb=B,sb=J,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(da.opacity),c(da.blending),void 0!==da.map&&null!==da.map||void 0!==da.envMap&&null!==da.envMap)?(n(oa,bb,zb,0,1,3,na,da,hc),n(rb,E,sb,1,2,3,na,da,hc)):(H=oa.positionScreen.x,I=oa.positionScreen.y,L=bb.positionScreen.x,N=bb.positionScreen.y,S=E.positionScreen.x,U=E.positionScreen.y,M=zb.positionScreen.x,O=zb.positionScreen.y,
-Q=rb.positionScreen.x,Z=rb.positionScreen.y,K=sb.positionScreen.x,ja=sb.positionScreen.y,da instanceof THREE.MeshLambertMaterial||da instanceof THREE.MeshPhongMaterial)?(ca.copy(da.color),ia.copy(da.emissive),da.vertexColors===THREE.FaceColors&&(ca.r*=na.color.r,ca.g*=na.color.g,ca.b*=na.color.b),!0===mb)?!1===da.wireframe&&da.shading==THREE.SmoothShading&&4==na.vertexNormalsLength?(ga.r=fa.r=V.r=aa.r=Na.r,ga.g=fa.g=V.g=aa.g=Na.g,ga.b=fa.b=V.b=aa.b=Na.b,m(na.v1.positionWorld,na.vertexNormalsWorld[0],
+G.positionScreen.y),La.addPoint(P.positionScreen.x,P.positionScreen.y),!0===fb.intersects(La)))(oa=C,bb=D,E=G,yb=P,rb=B,sb=J,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(da.opacity),c(da.blending),void 0!==da.map&&null!==da.map||void 0!==da.envMap&&null!==da.envMap)?(n(oa,bb,yb,0,1,3,na,da,hc),n(rb,E,sb,1,2,3,na,da,hc)):(H=oa.positionScreen.x,I=oa.positionScreen.y,L=bb.positionScreen.x,N=bb.positionScreen.y,S=E.positionScreen.x,U=E.positionScreen.y,M=yb.positionScreen.x,O=yb.positionScreen.y,
+Q=rb.positionScreen.x,Z=rb.positionScreen.y,K=sb.positionScreen.x,ja=sb.positionScreen.y,da instanceof THREE.MeshLambertMaterial||da instanceof THREE.MeshPhongMaterial)?(ca.copy(da.color),ia.copy(da.emissive),da.vertexColors===THREE.FaceColors&&(ca.r*=na.color.r,ca.g*=na.color.g,ca.b*=na.color.b),!0===lb)?!1===da.wireframe&&da.shading==THREE.SmoothShading&&4==na.vertexNormalsLength?(ga.r=fa.r=V.r=aa.r=Na.r,ga.g=fa.g=V.g=aa.g=Na.g,ga.b=fa.b=V.b=aa.b=Na.b,m(na.v1.positionWorld,na.vertexNormalsWorld[0],
 ga),m(na.v2.positionWorld,na.vertexNormalsWorld[1],fa),m(na.v4.positionWorld,na.vertexNormalsWorld[3],V),m(na.v3.positionWorld,na.vertexNormalsWorld[2],aa),ga.r=ga.r*ca.r+ia.r,ga.g=ga.g*ca.g+ia.g,ga.b=ga.b*ca.b+ia.b,fa.r=fa.r*ca.r+ia.r,fa.g=fa.g*ca.g+ia.g,fa.b=fa.b*ca.b+ia.b,V.r=V.r*ca.r+ia.r,V.g=V.g*ca.g+ia.g,V.b=V.b*ca.b+ia.b,aa.r=aa.r*ca.r+ia.r,aa.g=aa.g*ca.g+ia.g,aa.b=aa.b*ca.b+ia.b,va=wc(ga,fa,V,aa),q(H,I,L,N,M,O),ma(H,I,L,N,M,O,0,0,1,0,0,1,va),q(Q,Z,S,U,K,ja),ma(Q,Z,S,U,K,ja,1,0,1,1,0,1,va)):
 (R.r=Na.r,R.g=Na.g,R.b=Na.b,m(na.centroidWorld,na.normalWorld,R),R.r=R.r*ca.r+ia.r,R.g=R.g*ca.g+ia.g,R.b=R.b*ca.b+ia.b,t(H,I,L,N,S,U,M,O),!0===da.wireframe?s(R,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(R)):(R.r=ca.r+ia.r,R.g=ca.g+ia.g,R.b=ca.b+ia.b,t(H,I,L,N,S,U,M,O),!0===da.wireframe?s(R,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(R)):da instanceof THREE.MeshBasicMaterial?(R.copy(da.color),da.vertexColors===THREE.FaceColors&&(R.r*=na.color.r,R.g*=na.color.g,
-R.b*=na.color.b),t(H,I,L,N,S,U,M,O),!0===da.wireframe?s(R,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(R)):da instanceof THREE.MeshNormalMaterial?(R.r=gc(na.normalWorld.x),R.g=gc(na.normalWorld.y),R.b=gc(na.normalWorld.z),t(H,I,L,N,S,U,M,O),!0===da.wireframe?s(R,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(R)):da instanceof THREE.MeshDepthMaterial&&(Ca=l.near,Ka=l.far,ga.r=ga.g=ga.b=1-Cb(oa.positionScreen.z,Ca,Ka),fa.r=fa.g=fa.b=1-Cb(bb.positionScreen.z,Ca,
-Ka),V.r=V.g=V.b=1-Cb(zb.positionScreen.z,Ca,Ka),aa.r=aa.g=aa.b=1-Cb(E.positionScreen.z,Ca,Ka),va=wc(ga,fa,V,aa),q(H,I,L,N,M,O),ma(H,I,L,N,M,O,0,0,1,0,0,1,va),q(Q,Z,S,U,K,ja),ma(Q,Z,S,U,K,ja,1,0,1,1,0,1,va));xa.addRectangle(La)}r.setTransform(1,0,0,1,0,0)}}};
+R.b*=na.color.b),t(H,I,L,N,S,U,M,O),!0===da.wireframe?s(R,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(R)):da instanceof THREE.MeshNormalMaterial?(R.r=gc(na.normalWorld.x),R.g=gc(na.normalWorld.y),R.b=gc(na.normalWorld.z),t(H,I,L,N,S,U,M,O),!0===da.wireframe?s(R,da.wireframeLinewidth,da.wireframeLinecap,da.wireframeLinejoin):u(R)):da instanceof THREE.MeshDepthMaterial&&(Ba=l.near,Ka=l.far,ga.r=ga.g=ga.b=1-Cb(oa.positionScreen.z,Ba,Ka),fa.r=fa.g=fa.b=1-Cb(bb.positionScreen.z,Ba,
+Ka),V.r=V.g=V.b=1-Cb(yb.positionScreen.z,Ba,Ka),aa.r=aa.g=aa.b=1-Cb(E.positionScreen.z,Ba,Ka),va=wc(ga,fa,V,aa),q(H,I,L,N,M,O),ma(H,I,L,N,M,O,0,0,1,0,0,1,va),q(Q,Z,S,U,K,ja),ma(Q,Z,S,U,K,ja,1,0,1,1,0,1,va));wa.addRectangle(La)}r.setTransform(1,0,0,1,0,0)}}};
 THREE.ShaderChunk={fog_pars_fragment:"#ifdef USE_FOG\nuniform vec3 fogColor;\n#ifdef FOG_EXP2\nuniform float fogDensity;\n#else\nuniform float fogNear;\nuniform float fogFar;\n#endif\n#endif",fog_fragment:"#ifdef USE_FOG\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\n#ifdef FOG_EXP2\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\nuniform float reflectivity;\nuniform samplerCube envMap;\nuniform float flipEnvMap;\nuniform int combine;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nuniform bool useRefract;\nuniform float refractionRatio;\n#else\nvarying vec3 vReflect;\n#endif\n#endif",
 envmap_fragment:"#ifdef USE_ENVMAP\nvec3 reflectVec;\n#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nreflectVec = refract( cameraToVertex, normal, refractionRatio );\n} else { \nreflectVec = reflect( cameraToVertex, normal );\n}\n#else\nreflectVec = vReflect;\n#endif\n#ifdef DOUBLE_SIDED\nfloat flipNormal = ( -1.0 + 2.0 * float( gl_FrontFacing ) );\nvec4 cubeColor = textureCube( envMap, flipNormal * vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#else\nvec4 cubeColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n#endif\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\nif ( combine == 1 ) {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularStrength * reflectivity );\n} else if ( combine == 2 ) {\ngl_FragColor.xyz += cubeColor.xyz * specularStrength * reflectivity;\n} else {\ngl_FragColor.xyz = mix( gl_FragColor.xyz, gl_FragColor.xyz * cubeColor.xyz, specularStrength * reflectivity );\n}\n#endif",
 envmap_pars_vertex:"#if defined( USE_ENVMAP ) && ! defined( USE_BUMPMAP ) && ! defined( USE_NORMALMAP )\nvarying vec3 vReflect;\nuniform float refractionRatio;\nuniform bool useRefract;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( PHONG ) || defined( LAMBERT ) || defined ( USE_SHADOWMAP )\n#ifdef USE_SKINNING\nvec4 worldPosition = modelMatrix * skinned;\n#endif\n#if defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 worldPosition = modelMatrix * vec4( morphed, 1.0 );\n#endif\n#if ! defined( USE_MORPHTARGETS ) && ! defined( USE_SKINNING )\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n#endif\n#endif",
@@ -357,22 +357,22 @@ g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=k.create
 l;c++)a.__morphTargetsArrays.push(new Float32Array(3*i))}if(a.numMorphNormals){a.__morphNormalsArrays=[];c=0;for(l=a.numMorphNormals;c<l;c++)a.__morphNormalsArrays.push(new Float32Array(3*i))}a.__webglFaceCount=3*j;a.__webglLineCount=2*h;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var o in d.attributes){var j=d.attributes[o],c={},p;for(p in j)c[p]=j[p];if(!c.__webglInitialized||c.createUniqueBuffers)c.__webglInitialized=!0,h=1,"v2"===c.type?h=2:
 "v3"===c.type?h=3:"v4"===c.type?h=4:"c"===c.type&&(h=3),c.size=h,c.array=new Float32Array(i*h),c.buffer=k.createBuffer(),c.buffer.belongsToAttribute=o,j.needsUpdate=!0,c.__original=j;a.__webglCustomAttributesList.push(c)}}a.__inittedArrays=!0}function e(a,b){return a.material instanceof THREE.MeshFaceMaterial?0<a.material.materials.length?a.material.materials[b.materialIndex]:a.geometry.materials[b.materialIndex]:a.material}function f(a){return a instanceof THREE.MeshBasicMaterial&&!a.envMap||a instanceof
 THREE.MeshDepthMaterial?!1:a&&void 0!==a.shading&&a.shading===THREE.SmoothShading?THREE.SmoothShading:THREE.FlatShading}function g(a){return a.map||a.lightMap||a.bumpMap||a.normalMap||a.specularMap||a instanceof THREE.ShaderMaterial?!0:!1}function h(a){var b,c,d;for(b in a.attributes)d="index"===b?k.ELEMENT_ARRAY_BUFFER:k.ARRAY_BUFFER,c=a.attributes[b],c.buffer=k.createBuffer(),k.bindBuffer(d,c.buffer),k.bufferData(d,c.array,k.STATIC_DRAW)}function i(a,b,c){var d,e,f,g,h=a.vertices;g=h.length;var i=
-a.colors,j=i.length,l=a.__vertexArray,m=a.__colorArray,n=a.__sortArray,o=a.verticesNeedUpdate,p=a.colorsNeedUpdate,r=a.__webglCustomAttributesList;if(c.sortParticles){ab.copy($a);ab.multiplySelf(c.matrixWorld);for(d=0;d<g;d++)e=h[d],nb.copy(e),ab.multiplyVector3(nb),n[d]=[nb.z,d];n.sort(function(a,b){return b[0]-a[0]});for(d=0;d<g;d++)e=h[n[d][1]],f=3*d,l[f]=e.x,l[f+1]=e.y,l[f+2]=e.z;for(d=0;d<j;d++)f=3*d,e=i[n[d][1]],m[f]=e.r,m[f+1]=e.g,m[f+2]=e.b;if(r){i=0;for(j=r.length;i<j;i++)if(h=r[i],void 0===
+a.colors,j=i.length,l=a.__vertexArray,m=a.__colorArray,n=a.__sortArray,o=a.verticesNeedUpdate,p=a.colorsNeedUpdate,r=a.__webglCustomAttributesList;if(c.sortParticles){ab.copy($a);ab.multiplySelf(c.matrixWorld);for(d=0;d<g;d++)e=h[d],mb.copy(e),ab.multiplyVector3(mb),n[d]=[mb.z,d];n.sort(function(a,b){return b[0]-a[0]});for(d=0;d<g;d++)e=h[n[d][1]],f=3*d,l[f]=e.x,l[f+1]=e.y,l[f+2]=e.z;for(d=0;d<j;d++)f=3*d,e=i[n[d][1]],m[f]=e.r,m[f+1]=e.g,m[f+2]=e.b;if(r){i=0;for(j=r.length;i<j;i++)if(h=r[i],void 0===
 h.boundTo||"vertices"===h.boundTo)if(f=0,e=h.value.length,1===h.size)for(d=0;d<e;d++)g=n[d][1],h.array[d]=h.value[g];else if(2===h.size)for(d=0;d<e;d++)g=n[d][1],g=h.value[g],h.array[f]=g.x,h.array[f+1]=g.y,f+=2;else if(3===h.size)if("c"===h.type)for(d=0;d<e;d++)g=n[d][1],g=h.value[g],h.array[f]=g.r,h.array[f+1]=g.g,h.array[f+2]=g.b,f+=3;else for(d=0;d<e;d++)g=n[d][1],g=h.value[g],h.array[f]=g.x,h.array[f+1]=g.y,h.array[f+2]=g.z,f+=3;else if(4===h.size)for(d=0;d<e;d++)g=n[d][1],g=h.value[g],h.array[f]=
 g.x,h.array[f+1]=g.y,h.array[f+2]=g.z,h.array[f+3]=g.w,f+=4}}else{if(o)for(d=0;d<g;d++)e=h[d],f=3*d,l[f]=e.x,l[f+1]=e.y,l[f+2]=e.z;if(p)for(d=0;d<j;d++)e=i[d],f=3*d,m[f]=e.r,m[f+1]=e.g,m[f+2]=e.b;if(r){i=0;for(j=r.length;i<j;i++)if(h=r[i],h.needsUpdate&&(void 0===h.boundTo||"vertices"===h.boundTo))if(e=h.value.length,f=0,1===h.size)for(d=0;d<e;d++)h.array[d]=h.value[d];else if(2===h.size)for(d=0;d<e;d++)g=h.value[d],h.array[f]=g.x,h.array[f+1]=g.y,f+=2;else if(3===h.size)if("c"===h.type)for(d=0;d<
 e;d++)g=h.value[d],h.array[f]=g.r,h.array[f+1]=g.g,h.array[f+2]=g.b,f+=3;else for(d=0;d<e;d++)g=h.value[d],h.array[f]=g.x,h.array[f+1]=g.y,h.array[f+2]=g.z,f+=3;else if(4===h.size)for(d=0;d<e;d++)g=h.value[d],h.array[f]=g.x,h.array[f+1]=g.y,h.array[f+2]=g.z,h.array[f+3]=g.w,f+=4}}if(o||c.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,a.__webglVertexBuffer),k.bufferData(k.ARRAY_BUFFER,l,b);if(p||c.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,a.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,m,b);if(r){i=0;
 for(j=r.length;i<j;i++)if(h=r[i],h.needsUpdate||c.sortParticles)k.bindBuffer(k.ARRAY_BUFFER,h.buffer),k.bufferData(k.ARRAY_BUFFER,h.array,b)}}function j(a,b,c){var d=a.attributes,e=d.index,f=d.position,g=d.normal,h=d.uv,i=d.color,d=d.tangent;a.elementsNeedUpdate&&void 0!==e&&(k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.buffer),k.bufferData(k.ELEMENT_ARRAY_BUFFER,e.array,b));a.verticesNeedUpdate&&void 0!==f&&(k.bindBuffer(k.ARRAY_BUFFER,f.buffer),k.bufferData(k.ARRAY_BUFFER,f.array,b));a.normalsNeedUpdate&&
 void 0!==g&&(k.bindBuffer(k.ARRAY_BUFFER,g.buffer),k.bufferData(k.ARRAY_BUFFER,g.array,b));a.uvsNeedUpdate&&void 0!==h&&(k.bindBuffer(k.ARRAY_BUFFER,h.buffer),k.bufferData(k.ARRAY_BUFFER,h.array,b));a.colorsNeedUpdate&&void 0!==i&&(k.bindBuffer(k.ARRAY_BUFFER,i.buffer),k.bufferData(k.ARRAY_BUFFER,i.array,b));a.tangentsNeedUpdate&&void 0!==d&&(k.bindBuffer(k.ARRAY_BUFFER,d.buffer),k.bufferData(k.ARRAY_BUFFER,d.array,b));if(c)for(var j in a.attributes)delete a.attributes[j].array}function m(a,b){return a.z!==
-b.z?b.z-a.z:b.id-a.id}function n(a,b){return b[1]-a[1]}function l(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)ca=ga=null,V=aa=Ca=ua=gb=Ua=Ka=-1,hb=!0,a[d].render(b,c,Za,eb),ca=ga=null,V=aa=Ca=ua=gb=Ua=Ka=-1,hb=!0}function p(a,b,c,d,e,f,g,h){var i,k,j,l;b?(k=a.length-1,l=b=-1):(k=0,b=a.length,l=1);for(var m=k;m!==b;m+=l)if(i=a[m],i.render){k=i.object;j=i.buffer;if(h)i=h;else{i=i[c];if(!i)continue;g&&K.setBlending(i.blending,i.blendEquation,i.blendSrc,i.blendDst);K.setDepthTest(i.depthTest);K.setDepthWrite(i.depthWrite);
+b.z?b.z-a.z:b.id-a.id}function n(a,b){return b[1]-a[1]}function l(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)ca=ga=null,V=aa=Ba=ua=gb=kb=Ka=-1,nb=!0,a[d].render(b,c,Za,db),ca=ga=null,V=aa=Ba=ua=gb=kb=Ka=-1,nb=!0}function p(a,b,c,d,e,f,g,h){var i,k,j,l;b?(k=a.length-1,l=b=-1):(k=0,b=a.length,l=1);for(var m=k;m!==b;m+=l)if(i=a[m],i.render){k=i.object;j=i.buffer;if(h)i=h;else{i=i[c];if(!i)continue;g&&K.setBlending(i.blending,i.blendEquation,i.blendSrc,i.blendDst);K.setDepthTest(i.depthTest);K.setDepthWrite(i.depthWrite);
 C(i.polygonOffset,i.polygonOffsetFactor,i.polygonOffsetUnits)}K.setMaterialFaces(i);j instanceof THREE.BufferGeometry?K.renderBufferDirect(d,e,f,i,j,k):K.renderBuffer(d,e,f,i,j,k)}}function o(a,b,c,d,e,f,g){for(var h,i,k=0,j=a.length;k<j;k++)if(h=a[k],i=h.object,i.visible){if(g)h=g;else{h=h[b];if(!h)continue;f&&K.setBlending(h.blending,h.blendEquation,h.blendSrc,h.blendDst);K.setDepthTest(h.depthTest);K.setDepthWrite(h.depthWrite);C(h.polygonOffset,h.polygonOffsetFactor,h.polygonOffsetUnits)}K.renderImmediateObject(c,
-d,e,h,i)}}function r(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function t(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function q(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function z(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function u(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function s(a,b,c,d,e){wa=0;d.needsUpdate&&(d.program&&K.deallocateMaterial(d),K.initMaterial(d,b,c,e),d.needsUpdate=
+d,e,h,i)}}function r(a,b,c){a.push({buffer:b,object:c,opaque:null,transparent:null})}function t(a){for(var b in a.attributes)if(a.attributes[b].needsUpdate)return!0;return!1}function q(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function z(a,b){for(var c=a.length-1;0<=c;c--)a[c].object===b&&a.splice(c,1)}function u(a,b){for(var c=a.length-1;0<=c;c--)a[c]===b&&a.splice(c,1)}function s(a,b,c,d,e){Aa=0;d.needsUpdate&&(d.program&&K.deallocateMaterial(d),K.initMaterial(d,b,c,e),d.needsUpdate=
 !1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(K.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==ga&&(k.useProgram(g),ga=g,f=!0);d.id!==V&&(V=d.id,f=!0);if(f||a!==ca)k.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==ca&&(ca=a);if(d.skinning)if(fc&&e.useVertexTexture){if(null!==h.boneTexture){var j=E();k.uniform1i(h.boneTexture,j);K.setTexture(e.boneTexture,j)}}else null!==h.boneGlobalMatrices&&k.uniformMatrix4fv(h.boneGlobalMatrices,
-!1,e.boneMatrices);if(f){c&&d.fog&&(i.fogColor.value=c.color,c instanceof THREE.Fog?(i.fogNear.value=c.near,i.fogFar.value=c.far):c instanceof THREE.FogExp2&&(i.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(hb){for(var l=0,m=0,n=0,o,p,r,q=qb,s=q.directional.colors,t=q.directional.positions,u=q.point.colors,z=q.point.positions,A=q.point.distances,B=q.spot.colors,C=q.spot.positions,D=q.spot.distances,G=q.spot.directions,R=
+!1,e.boneMatrices);if(f){c&&d.fog&&(i.fogColor.value=c.color,c instanceof THREE.Fog?(i.fogNear.value=c.near,i.fogFar.value=c.far):c instanceof THREE.FogExp2&&(i.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d.lights){if(nb){for(var l=0,m=0,n=0,o,p,r,q=qb,s=q.directional.colors,t=q.directional.positions,u=q.point.colors,z=q.point.positions,A=q.point.distances,B=q.spot.colors,C=q.spot.positions,D=q.spot.distances,G=q.spot.directions,R=
 q.spot.anglesCos,O=q.spot.exponents,J=q.hemi.skyColors,Q=q.hemi.groundColors,N=q.hemi.positions,M=0,fa=0,L=0,S=0,ia=0,Z=0,aa=0,ba=0,U=p=0,c=U=U=0,f=b.length;c<f;c++)j=b[c],j.onlyShadow||(o=j.color,r=j.intensity,p=j.distance,j instanceof THREE.AmbientLight?j.visible&&(K.gammaInput?(l+=o.r*o.r,m+=o.g*o.g,n+=o.b*o.b):(l+=o.r,m+=o.g,n+=o.b)):j instanceof THREE.DirectionalLight?(ia+=1,j.visible&&(p=3*M,K.gammaInput?w(s,p,o,r*r):v(s,p,o,r),ta.copy(j.matrixWorld.getPosition()),ta.subSelf(j.target.matrixWorld.getPosition()),
 ta.normalize(),t[p]=ta.x,t[p+1]=ta.y,t[p+2]=ta.z,M+=1)):j instanceof THREE.PointLight?(Z+=1,j.visible&&(U=3*fa,K.gammaInput?w(u,U,o,r*r):v(u,U,o,r),r=j.matrixWorld.getPosition(),z[U]=r.x,z[U+1]=r.y,z[U+2]=r.z,A[fa]=p,fa+=1)):j instanceof THREE.SpotLight?(aa+=1,j.visible&&(U=3*L,K.gammaInput?w(B,U,o,r*r):v(B,U,o,r),r=j.matrixWorld.getPosition(),C[U]=r.x,C[U+1]=r.y,C[U+2]=r.z,D[L]=p,ta.copy(r),ta.subSelf(j.target.matrixWorld.getPosition()),ta.normalize(),G[U]=ta.x,G[U+1]=ta.y,G[U+2]=ta.z,R[L]=Math.cos(j.angle),
 O[L]=j.exponent,L+=1)):j instanceof THREE.HemisphereLight&&(ba+=1,j.visible&&(o=j.color,p=j.groundColor,U=3*S,K.gammaInput?(r*=r,w(J,U,o,r),w(Q,U,p,r)):(v(J,U,o,r),v(Q,U,p,r)),ta.copy(j.matrixWorld.getPosition()),ta.normalize(),N[U]=ta.x,N[U+1]=ta.y,N[U+2]=ta.z,S+=1)));c=3*M;for(f=Math.max(s.length,3*ia);c<f;c++)s[c]=0;c=3*M;for(f=Math.max(t.length,3*ia);c<f;c++)t[c]=0;c=3*fa;for(f=Math.max(u.length,3*Z);c<f;c++)u[c]=0;c=3*fa;for(f=Math.max(z.length,3*Z);c<f;c++)z[c]=0;c=fa;for(f=Math.max(A.length,
 Z);c<f;c++)A[c]=0;c=3*L;for(f=Math.max(B.length,3*aa);c<f;c++)B[c]=0;c=3*L;for(f=Math.max(C.length,3*aa);c<f;c++)C[c]=0;c=3*L;for(f=Math.max(G.length,3*aa);c<f;c++)G[c]=0;c=L;for(f=Math.max(R.length,aa);c<f;c++)R[c]=0;c=L;for(f=Math.max(O.length,aa);c<f;c++)O[c]=0;c=L;for(f=Math.max(D.length,aa);c<f;c++)D[c]=0;c=3*S;for(f=Math.max(J.length,3*ba);c<f;c++)J[c]=0;c=3*S;for(f=Math.max(Q.length,3*ba);c<f;c++)Q[c]=0;c=3*S;for(f=Math.max(N.length,3*ba);c<f;c++)N[c]=0;q.directional.length=M;q.point.length=
-fa;q.spot.length=L;q.hemi.length=S;q.ambient[0]=l;q.ambient[1]=m;q.ambient[2]=n;hb=!1}c=qb;i.ambientLightColor.value=c.ambient;i.directionalLightColor.value=c.directional.colors;i.directionalLightDirection.value=c.directional.positions;i.pointLightColor.value=c.point.colors;i.pointLightPosition.value=c.point.positions;i.pointLightDistance.value=c.point.distances;i.spotLightColor.value=c.spot.colors;i.spotLightPosition.value=c.spot.positions;i.spotLightDistance.value=c.spot.distances;i.spotLightDirection.value=
+fa;q.spot.length=L;q.hemi.length=S;q.ambient[0]=l;q.ambient[1]=m;q.ambient[2]=n;nb=!1}c=qb;i.ambientLightColor.value=c.ambient;i.directionalLightColor.value=c.directional.colors;i.directionalLightDirection.value=c.directional.positions;i.pointLightColor.value=c.point.colors;i.pointLightPosition.value=c.point.positions;i.pointLightDistance.value=c.point.distances;i.spotLightColor.value=c.spot.colors;i.spotLightPosition.value=c.spot.positions;i.spotLightDistance.value=c.spot.distances;i.spotLightDirection.value=
 c.spot.directions;i.spotLightAngleCos.value=c.spot.anglesCos;i.spotLightExponent.value=c.spot.exponents;i.hemisphereLightSkyColor.value=c.hemi.skyColors;i.hemisphereLightGroundColor.value=c.hemi.groundColors;i.hemisphereLightDirection.value=c.hemi.positions}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial){i.opacity.value=d.opacity;K.gammaInput?i.diffuse.value.copyGammaToLinear(d.color):i.diffuse.value=d.color;i.map.value=d.map;
 i.lightMap.value=d.lightMap;i.specularMap.value=d.specularMap;d.bumpMap&&(i.bumpMap.value=d.bumpMap,i.bumpScale.value=d.bumpScale);d.normalMap&&(i.normalMap.value=d.normalMap,i.normalScale.value.copy(d.normalScale));var ja;d.map?ja=d.map:d.specularMap?ja=d.specularMap:d.normalMap?ja=d.normalMap:d.bumpMap&&(ja=d.bumpMap);void 0!==ja&&(c=ja.offset,ja=ja.repeat,i.offsetRepeat.value.set(c.x,c.y,ja.x,ja.y));i.envMap.value=d.envMap;i.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;
 i.reflectivity.value=d.reflectivity;i.refractionRatio.value=d.refractionRatio;i.combine.value=d.combine;i.useRefract.value=d.envMap&&d.envMap.mapping instanceof THREE.CubeRefractionMapping}d instanceof THREE.LineBasicMaterial?(i.diffuse.value=d.color,i.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(i.diffuse.value=d.color,i.opacity.value=d.opacity,i.dashSize.value=d.dashSize,i.totalSize.value=d.dashSize+d.gapSize,i.scale.value=d.scale):d instanceof THREE.ParticleBasicMaterial?(i.psColor.value=
@@ -385,29 +385,29 @@ j.length));l=0;for(m=j.length;l<m;l++)j[l].flattenToArrayOffset(c._array,16*l);k
 j=[];for(l=0;6>l;l++)K.autoScaleCubemaps&&!f?(m=j,n=l,q=c.image[l],t=Oc,q.width<=t&&q.height<=t||(u=Math.max(q.width,q.height),s=Math.floor(q.width*t/u),t=Math.floor(q.height*t/u),u=document.createElement("canvas"),u.width=s,u.height=t,u.getContext("2d").drawImage(q,0,0,q.width,q.height,0,0,s,t),q=u),m[n]=q):j[l]=c.image[l];l=j[0];m=0===(l.width&l.width-1)&&0===(l.height&l.height-1);n=H(c.format);q=H(c.type);P(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){t=j[l].mipmaps;u=0;for(z=t.length;u<z;u++)s=
 t[u],k.compressedTexImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+l,u,n,s.width,s.height,0,s.data)}else k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,n,n,q,j[l]);c.generateMipmaps&&m&&k.generateMipmap(k.TEXTURE_CUBE_MAP);c.needsUpdate=!1;if(c.onUpdate)c.onUpdate()}else k.activeTexture(k.TEXTURE0+f),k.bindTexture(k.TEXTURE_CUBE_MAP,c.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(c=n,k.activeTexture(k.TEXTURE0+j),k.bindTexture(k.TEXTURE_CUBE_MAP,c.__webglTexture)):K.setTexture(n,
 j)}else if("tv"===l){void 0===c._array&&(c._array=[]);l=0;for(m=c.value.length;l<m;l++)c._array[l]=E();k.uniform1iv(f,c._array);l=0;for(m=c.value.length;l<m;l++)n=c.value[l],j=c._array[l],n&&K.setTexture(n,j)}if((d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d.envMap)&&null!==h.cameraPosition)b=a.matrixWorld.getPosition(),k.uniform3f(h.cameraPosition,b.x,b.y,b.z);(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.ShaderMaterial||
-d.skinning)&&null!==h.viewMatrix&&k.uniformMatrix4fv(h.viewMatrix,!1,a._viewMatrixArray)}k.uniformMatrix4fv(h.modelViewMatrix,!1,e._modelViewMatrix.elements);h.normalMatrix&&k.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrix.elements);null!==h.modelMatrix&&k.uniformMatrix4fv(h.modelMatrix,!1,e.matrixWorld.elements);return g}function E(){var a=wa;a>=vc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+vc);wa+=1;return a}function A(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,
-a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function w(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function v(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function C(a,b,c){lb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),lb=a);if(a&&(Ab!==b||Bb!==c))k.polygonOffset(b,c),Ab=b,Bb=c}function D(a){for(var a=a.split("\n"),b=0,c=a.length;b<c;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function G(a,b){var c;"fragment"===
+d.skinning)&&null!==h.viewMatrix&&k.uniformMatrix4fv(h.viewMatrix,!1,a._viewMatrixArray)}k.uniformMatrix4fv(h.modelViewMatrix,!1,e._modelViewMatrix.elements);h.normalMatrix&&k.uniformMatrix3fv(h.normalMatrix,!1,e._normalMatrix.elements);null!==h.modelMatrix&&k.uniformMatrix4fv(h.modelMatrix,!1,e.matrixWorld.elements);return g}function E(){var a=Aa;a>=vc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+vc);Aa+=1;return a}function A(a,b){a._modelViewMatrix.multiply(b.matrixWorldInverse,
+a.matrixWorld);a._normalMatrix.getInverse(a._modelViewMatrix);a._normalMatrix.transpose()}function w(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function v(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function C(a,b,c){zb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),zb=a);if(a&&(Ab!==b||Bb!==c))k.polygonOffset(b,c),Ab=b,Bb=c}function D(a){for(var a=a.split("\n"),b=0,c=a.length;b<c;b++)a[b]=b+1+": "+a[b];return a.join("\n")}function G(a,b){var c;"fragment"===
 a?c=k.createShader(k.FRAGMENT_SHADER):"vertex"===a&&(c=k.createShader(k.VERTEX_SHADER));k.shaderSource(c,b);k.compileShader(c);return!k.getShaderParameter(c,k.COMPILE_STATUS)?(console.error(k.getShaderInfoLog(c)),console.error(D(b)),null):c}function P(a,b,c){c?(k.texParameteri(a,k.TEXTURE_WRAP_S,H(b.wrapS)),k.texParameteri(a,k.TEXTURE_WRAP_T,H(b.wrapT)),k.texParameteri(a,k.TEXTURE_MAG_FILTER,H(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,H(b.minFilter))):(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,J(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,J(b.minFilter)));if(yb&&b.type!==THREE.FloatType&&(1<b.anisotropy||b.__oldAnisotropy))k.texParameterf(a,yb.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,mc)),b.__oldAnisotropy=b.anisotropy}function B(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);b.depthBuffer&&!b.stencilBuffer?(k.renderbufferStorage(k.RENDERBUFFER,k.DEPTH_COMPONENT16,b.width,
+k.CLAMP_TO_EDGE),k.texParameteri(a,k.TEXTURE_WRAP_T,k.CLAMP_TO_EDGE),k.texParameteri(a,k.TEXTURE_MAG_FILTER,J(b.magFilter)),k.texParameteri(a,k.TEXTURE_MIN_FILTER,J(b.minFilter)));if(xb&&b.type!==THREE.FloatType&&(1<b.anisotropy||b.__oldAnisotropy))k.texParameterf(a,xb.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(b.anisotropy,mc)),b.__oldAnisotropy=b.anisotropy}function B(a,b){k.bindRenderbuffer(k.RENDERBUFFER,a);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)):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)):k.renderbufferStorage(k.RENDERBUFFER,k.RGBA4,b.width,b.height)}function J(a){return a===THREE.NearestFilter||a===THREE.NearestMipMapNearestFilter||a===THREE.NearestMipMapLinearFilter?k.NEAREST:k.LINEAR}function H(a){if(a===THREE.RepeatWrapping)return k.REPEAT;
 if(a===THREE.ClampToEdgeWrapping)return k.CLAMP_TO_EDGE;if(a===THREE.MirroredRepeatWrapping)return k.MIRRORED_REPEAT;if(a===THREE.NearestFilter)return k.NEAREST;if(a===THREE.NearestMipMapNearestFilter)return k.NEAREST_MIPMAP_NEAREST;if(a===THREE.NearestMipMapLinearFilter)return k.NEAREST_MIPMAP_LINEAR;if(a===THREE.LinearFilter)return k.LINEAR;if(a===THREE.LinearMipMapNearestFilter)return k.LINEAR_MIPMAP_NEAREST;if(a===THREE.LinearMipMapLinearFilter)return k.LINEAR_MIPMAP_LINEAR;if(a===THREE.UnsignedByteType)return k.UNSIGNED_BYTE;
 if(a===THREE.UnsignedShort4444Type)return k.UNSIGNED_SHORT_4_4_4_4;if(a===THREE.UnsignedShort5551Type)return k.UNSIGNED_SHORT_5_5_5_1;if(a===THREE.UnsignedShort565Type)return k.UNSIGNED_SHORT_5_6_5;if(a===THREE.ByteType)return k.BYTE;if(a===THREE.ShortType)return k.SHORT;if(a===THREE.UnsignedShortType)return k.UNSIGNED_SHORT;if(a===THREE.IntType)return k.INT;if(a===THREE.UnsignedIntType)return k.UNSIGNED_INT;if(a===THREE.FloatType)return k.FLOAT;if(a===THREE.AlphaFormat)return k.ALPHA;if(a===THREE.RGBFormat)return k.RGB;
 if(a===THREE.RGBAFormat)return k.RGBA;if(a===THREE.LuminanceFormat)return k.LUMINANCE;if(a===THREE.LuminanceAlphaFormat)return k.LUMINANCE_ALPHA;if(a===THREE.AddEquation)return k.FUNC_ADD;if(a===THREE.SubtractEquation)return k.FUNC_SUBTRACT;if(a===THREE.ReverseSubtractEquation)return k.FUNC_REVERSE_SUBTRACT;if(a===THREE.ZeroFactor)return k.ZERO;if(a===THREE.OneFactor)return k.ONE;if(a===THREE.SrcColorFactor)return k.SRC_COLOR;if(a===THREE.OneMinusSrcColorFactor)return k.ONE_MINUS_SRC_COLOR;if(a===
-THREE.SrcAlphaFactor)return k.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return k.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return k.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return k.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return k.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return k.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return k.SRC_ALPHA_SATURATE;if(void 0!==pb){if(a===THREE.RGB_S3TC_DXT1_Format)return pb.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return pb.COMPRESSED_RGBA_S3TC_DXT1_EXT;
-if(a===THREE.RGBA_S3TC_DXT3_Format)return pb.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return pb.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},I=void 0!==a.canvas?a.canvas:document.createElement("canvas"),L=void 0!==a.precision?a.precision:"highp",N=void 0!==a.alpha?a.alpha:!0,S=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,U=void 0!==a.antialias?a.antialias:!1,M=void 0!==a.stencil?a.stencil:!0,O=void 0!==a.preserveDrawingBuffer?
+THREE.SrcAlphaFactor)return k.SRC_ALPHA;if(a===THREE.OneMinusSrcAlphaFactor)return k.ONE_MINUS_SRC_ALPHA;if(a===THREE.DstAlphaFactor)return k.DST_ALPHA;if(a===THREE.OneMinusDstAlphaFactor)return k.ONE_MINUS_DST_ALPHA;if(a===THREE.DstColorFactor)return k.DST_COLOR;if(a===THREE.OneMinusDstColorFactor)return k.ONE_MINUS_DST_COLOR;if(a===THREE.SrcAlphaSaturateFactor)return k.SRC_ALPHA_SATURATE;if(void 0!==ob){if(a===THREE.RGB_S3TC_DXT1_Format)return ob.COMPRESSED_RGB_S3TC_DXT1_EXT;if(a===THREE.RGBA_S3TC_DXT1_Format)return ob.COMPRESSED_RGBA_S3TC_DXT1_EXT;
+if(a===THREE.RGBA_S3TC_DXT3_Format)return ob.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(a===THREE.RGBA_S3TC_DXT5_Format)return ob.COMPRESSED_RGBA_S3TC_DXT5_EXT}return 0}console.log("THREE.WebGLRenderer",THREE.REVISION);var a=a||{},I=void 0!==a.canvas?a.canvas:document.createElement("canvas"),L=void 0!==a.precision?a.precision:"highp",N=void 0!==a.alpha?a.alpha:!0,S=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,U=void 0!==a.antialias?a.antialias:!1,M=void 0!==a.stencil?a.stencil:!0,O=void 0!==a.preserveDrawingBuffer?
 a.preserveDrawingBuffer:!1,Q=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),Z=void 0!==a.clearAlpha?a.clearAlpha:0;this.domElement=I;this.context=null;this.autoUpdateScene=this.autoUpdateObjects=this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.shadowMapEnabled=this.physicallyBasedShading=this.gammaOutput=this.gammaInput=!1;this.shadowMapCullFrontFaces=this.shadowMapSoft=this.shadowMapAutoUpdate=!0;this.shadowMapCascade=this.shadowMapDebug=
-!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var K=this,ja=[],R=0,ga=null,fa=null,V=-1,aa=null,ca=null,ia=0,wa=0,ua=-1,Ca=-1,Ka=-1,va=-1,db=-1,xb=-1,Ua=-1,gb=-1,lb=null,Ab=null,Bb=null,fb=null,xa=0,La=0,mb=0,Na=0,Za=0,eb=0,ka=new THREE.Frustum,$a=new THREE.Matrix4,ab=new THREE.Matrix4,nb=new THREE.Vector4,ta=new THREE.Vector3,
-hb=!0,qb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},k,yb,pb;try{if(!(k=I.getContext("experimental-webgl",{alpha:N,premultipliedAlpha:S,antialias:U,stencil:M,preserveDrawingBuffer:O})))throw"Error creating WebGL context.";}catch(Nc){console.error(Nc)}a=k.getExtension("OES_texture_float");
-N=k.getExtension("OES_standard_derivatives");yb=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");pb=k.getExtension("WEBGL_compressed_texture_s3tc")||k.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||k.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");a||console.log("THREE.WebGLRenderer: Float textures not supported.");N||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
-yb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");pb||console.log("THREE.WebGLRenderer: S3TC compressed textures 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(Q.r,Q.g,Q.b,Z);this.context=k;var vc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),
-N=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Oc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),mc=yb?k.getParameter(yb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,ec=0<N,fc=ec&&a;pb&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);this.getContext=function(){return k};this.supportsVertexTextures=function(){return ec};this.getMaxAnisotropy=function(){return mc};this.setSize=function(a,b){I.width=a;I.height=b;this.setViewport(0,0,I.width,I.height)};this.setViewport=function(a,
-b,c,d){xa=void 0!==a?a:0;La=void 0!==b?b:0;mb=void 0!==c?c:I.width;Na=void 0!==d?d:I.height;k.viewport(xa,La,mb,Na)};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){Q.setHex(a);Z=b;k.clearColor(Q.r,Q.g,Q.b,Z)};this.setClearColor=function(a,b){Q.copy(a);Z=b;k.clearColor(Q.r,Q.g,Q.b,Z)};this.getClearColor=function(){return Q};this.getClearAlpha=function(){return Z};this.clear=
+!1;this.maxMorphTargets=8;this.maxMorphNormals=4;this.autoScaleCubemaps=!0;this.renderPluginsPre=[];this.renderPluginsPost=[];this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}};var K=this,ja=[],R=0,ga=null,fa=null,V=-1,aa=null,ca=null,ia=0,Aa=0,ua=-1,Ba=-1,Ka=-1,va=-1,eb=-1,Ya=-1,kb=-1,gb=-1,zb=null,Ab=null,Bb=null,fb=null,wa=0,La=0,lb=0,Na=0,Za=0,db=0,ka=new THREE.Frustum,$a=new THREE.Matrix4,ab=new THREE.Matrix4,mb=new THREE.Vector4,ta=new THREE.Vector3,
+nb=!0,qb={ambient:[0,0,0],directional:{length:0,colors:[],positions:[]},point:{length:0,colors:[],positions:[],distances:[]},spot:{length:0,colors:[],positions:[],distances:[],directions:[],anglesCos:[],exponents:[]},hemi:{length:0,skyColors:[],groundColors:[],positions:[]}},k,xb,ob;try{if(!(k=I.getContext("experimental-webgl",{alpha:N,premultipliedAlpha:S,antialias:U,stencil:M,preserveDrawingBuffer:O})))throw"Error creating WebGL context.";}catch(Nc){console.error(Nc)}a=k.getExtension("OES_texture_float");
+N=k.getExtension("OES_standard_derivatives");xb=k.getExtension("EXT_texture_filter_anisotropic")||k.getExtension("MOZ_EXT_texture_filter_anisotropic")||k.getExtension("WEBKIT_EXT_texture_filter_anisotropic");ob=k.getExtension("WEBGL_compressed_texture_s3tc")||k.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||k.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");a||console.log("THREE.WebGLRenderer: Float textures not supported.");N||console.log("THREE.WebGLRenderer: Standard derivatives not supported.");
+xb||console.log("THREE.WebGLRenderer: Anisotropic texture filtering not supported.");ob||console.log("THREE.WebGLRenderer: S3TC compressed textures 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(Q.r,Q.g,Q.b,Z);this.context=k;var vc=k.getParameter(k.MAX_TEXTURE_IMAGE_UNITS),
+N=k.getParameter(k.MAX_VERTEX_TEXTURE_IMAGE_UNITS);k.getParameter(k.MAX_TEXTURE_SIZE);var Oc=k.getParameter(k.MAX_CUBE_MAP_TEXTURE_SIZE),mc=xb?k.getParameter(xb.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0,ec=0<N,fc=ec&&a;ob&&k.getParameter(k.COMPRESSED_TEXTURE_FORMATS);this.getContext=function(){return k};this.supportsVertexTextures=function(){return ec};this.getMaxAnisotropy=function(){return mc};this.setSize=function(a,b){I.width=a;I.height=b;this.setViewport(0,0,I.width,I.height)};this.setViewport=function(a,
+b,c,d){wa=void 0!==a?a:0;La=void 0!==b?b:0;lb=void 0!==c?c:I.width;Na=void 0!==d?d:I.height;k.viewport(wa,La,lb,Na)};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){Q.setHex(a);Z=b;k.clearColor(Q.r,Q.g,Q.b,Z)};this.setClearColor=function(a,b){Q.copy(a);Z=b;k.clearColor(Q.r,Q.g,Q.b,Z)};this.getClearColor=function(){return Q};this.getClearAlpha=function(){return Z};this.clear=
 function(a,b,c){var d=0;if(void 0===a||a)d|=k.COLOR_BUFFER_BIT;if(void 0===b||b)d|=k.DEPTH_BUFFER_BIT;if(void 0===c||c)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)if(a.__webglInit=!1,delete a._modelViewMatrix,delete a._normalMatrix,
 delete a._normalMatrixArray,delete a._modelViewMatrixArray,delete a._modelMatrixArray,a instanceof THREE.Mesh)for(var c in a.geometry.geometryGroups){var d=a.geometry.geometryGroups[c];k.deleteBuffer(d.__webglVertexBuffer);k.deleteBuffer(d.__webglNormalBuffer);k.deleteBuffer(d.__webglTangentBuffer);k.deleteBuffer(d.__webglColorBuffer);k.deleteBuffer(d.__webglUVBuffer);k.deleteBuffer(d.__webglUV2Buffer);k.deleteBuffer(d.__webglSkinIndicesBuffer);k.deleteBuffer(d.__webglSkinWeightsBuffer);k.deleteBuffer(d.__webglFaceBuffer);
 k.deleteBuffer(d.__webglLineBuffer);var e=void 0,f=void 0;if(d.numMorphTargets){e=0;for(f=d.numMorphTargets;e<f;e++)k.deleteBuffer(d.__webglMorphTargetsBuffers[e])}if(d.numMorphNormals){e=0;for(f=d.numMorphNormals;e<f;e++)k.deleteBuffer(d.__webglMorphNormalsBuffers[e])}b(d);K.info.memory.geometries--}else a instanceof THREE.Ribbon?(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),k.deleteBuffer(a.__webglNormalBuffer),b(a),K.info.memory.geometries--):a instanceof
 THREE.Line?(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),k.deleteBuffer(a.__webglLineDistanceBuffer),b(a),K.info.memory.geometries--):a instanceof THREE.ParticleSystem&&(a=a.geometry,k.deleteBuffer(a.__webglVertexBuffer),k.deleteBuffer(a.__webglColorBuffer),b(a),K.info.memory.geometries--)};this.deallocateTexture=function(a){a.__webglInit&&(a.__webglInit=!1,k.deleteTexture(a.__webglTexture),K.info.memory.textures--)};this.deallocateRenderTarget=function(a){if(a&&
 a.__webglTexture)if(k.deleteTexture(a.__webglTexture),a instanceof THREE.WebGLRenderTargetCube)for(var b=0;6>b;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=!1,a=0;for(c=ja.length;a<c;a++)if(d=ja[a],d.program===b){d.usedTimes--;0===d.usedTimes&&(e=!0);break}if(e){e=[];a=0;for(c=
-ja.length;a<c;a++)d=ja[a],d.program!==b&&e.push(d);ja=e;k.deleteProgram(b);K.info.memory.programs--}}};this.updateShadowMap=function(a,b){ga=null;V=aa=gb=Ua=Ka=-1;hb=!0;Ca=ua=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=k.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=k.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=k.createBuffer());a.hasColors&&!a.__webglColorBuffer&&
+ja.length;a<c;a++)d=ja[a],d.program!==b&&e.push(d);ja=e;k.deleteProgram(b);K.info.memory.programs--}}};this.updateShadowMap=function(a,b){ga=null;V=aa=gb=kb=Ka=-1;nb=!0;Ba=ua=-1;this.shadowMapPlugin.update(a,b)};this.renderBufferImmediate=function(a,b,c){a.hasPositions&&!a.__webglVertexBuffer&&(a.__webglVertexBuffer=k.createBuffer());a.hasNormals&&!a.__webglNormalBuffer&&(a.__webglNormalBuffer=k.createBuffer());a.hasUvs&&!a.__webglUvBuffer&&(a.__webglUvBuffer=k.createBuffer());a.hasColors&&!a.__webglColorBuffer&&
 (a.__webglColorBuffer=k.createBuffer());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,!1,0,0));if(a.hasNormals){k.bindBuffer(k.ARRAY_BUFFER,a.__webglNormalBuffer);if(c.shading===THREE.FlatShading){var d,e,f,g,h,i,j,l,m,n,o,p=3*a.count;for(o=0;o<p;o+=9)n=a.normalArray,d=n[o],e=n[o+1],f=n[o+2],g=n[o+3],i=n[o+4],l=n[o+
 5],h=n[o+6],j=n[o+7],m=n[o+8],d=(d+g+h)/3,e=(e+i+j)/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,!1,0,0)}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,!1,0,0));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,!1,0,0));k.drawArrays(k.TRIANGLES,0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){if(!1!==d.visible)if(c=s(a,b,c,d,f),a=c.attributes,b=!1,d=16777215*e.id+2*c.id+(d.wireframe?1:0),d!==aa&&(aa=d,b=!0),f instanceof
@@ -422,10 +422,10 @@ h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(k.b
 4,k.FLOAT,!1,0,0));0<=b.uv&&(e.__webglUVBuffer?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUVBuffer),k.vertexAttribPointer(b.uv,2,k.FLOAT,!1,0,0),k.enableVertexAttribArray(b.uv)):k.disableVertexAttribArray(b.uv));0<=b.uv2&&(e.__webglUV2Buffer?(k.bindBuffer(k.ARRAY_BUFFER,e.__webglUV2Buffer),k.vertexAttribPointer(b.uv2,2,k.FLOAT,!1,0,0),k.enableVertexAttribArray(b.uv2)):k.disableVertexAttribArray(b.uv2));d.skinning&&(0<=b.skinIndex&&0<=b.skinWeight)&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinIndicesBuffer),
 k.vertexAttribPointer(b.skinIndex,4,k.FLOAT,!1,0,0),k.bindBuffer(k.ARRAY_BUFFER,e.__webglSkinWeightsBuffer),k.vertexAttribPointer(b.skinWeight,4,k.FLOAT,!1,0,0));0<=b.lineDistance&&(k.bindBuffer(k.ARRAY_BUFFER,e.__webglLineDistanceBuffer),k.vertexAttribPointer(b.lineDistance,1,k.FLOAT,!1,0,0))}f instanceof THREE.Mesh?(d.wireframe?(d=d.wireframeLinewidth,d!==fb&&(k.lineWidth(d),fb=d),a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,
 0)):(a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglFaceBuffer),k.drawElements(k.TRIANGLES,e.__webglFaceCount,k.UNSIGNED_SHORT,0)),K.info.render.calls++,K.info.render.vertices+=e.__webglFaceCount,K.info.render.faces+=e.__webglFaceCount/3):f instanceof THREE.Line?(f=f.type===THREE.LineStrip?k.LINE_STRIP:k.LINES,d=d.linewidth,d!==fb&&(k.lineWidth(d),fb=d),k.drawArrays(f,0,e.__webglLineCount),K.info.render.calls++):f instanceof THREE.ParticleSystem?(k.drawArrays(k.POINTS,0,e.__webglParticleCount),K.info.render.calls++,
-K.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),K.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,i=a.__lights,j=a.fog;V=-1;hb=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b._viewMatrixArray||(b._viewMatrixArray=new Float32Array(16));
+K.info.render.points+=e.__webglParticleCount):f instanceof THREE.Ribbon&&(k.drawArrays(k.TRIANGLE_STRIP,0,e.__webglVertexCount),K.info.render.calls++)}};this.render=function(a,b,c,d){if(!1===b instanceof THREE.Camera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");else{var e,f,g,h,i=a.__lights,j=a.fog;V=-1;nb=!0;this.autoUpdateScene&&a.updateMatrixWorld();void 0===b.parent&&b.updateMatrixWorld();b._viewMatrixArray||(b._viewMatrixArray=new Float32Array(16));
 b._projectionMatrixArray||(b._projectionMatrixArray=new Float32Array(16));b.matrixWorldInverse.getInverse(b.matrixWorld);b.matrixWorldInverse.flattenToArray(b._viewMatrixArray);b.projectionMatrix.flattenToArray(b._projectionMatrixArray);$a.multiply(b.projectionMatrix,b.matrixWorldInverse);ka.setFromMatrix($a);this.autoUpdateObjects&&this.initWebGLObjects(a);l(this.renderPluginsPre,a,b);K.info.render.calls=0;K.info.render.vertices=0;K.info.render.faces=0;K.info.render.points=0;this.setRenderTarget(c);
 (this.autoClear||d)&&this.clear(this.autoClearColor,this.autoClearDepth,this.autoClearStencil);h=a.__webglObjects;d=0;for(e=h.length;d<e;d++)if(f=h[d],g=f.object,f.render=!1,g.visible&&(!(g instanceof THREE.Mesh||g instanceof THREE.ParticleSystem)||!g.frustumCulled||ka.contains(g))){A(g,b);var n=f,r=n.object,q=n.buffer,t=void 0,s=t=void 0,s=r.material;if(s instanceof THREE.MeshFaceMaterial)t=q.materialIndex,0<=t&&(t=0<s.materials.length?s.materials[t]:r.geometry.materials[t],t.transparent?(n.transparent=
-t,n.opaque=null):(n.opaque=t,n.transparent=null));else if(t=s)t.transparent?(n.transparent=t,n.opaque=null):(n.opaque=t,n.transparent=null);f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(nb.copy(g.matrixWorld.getPosition()),$a.multiplyVector3(nb),f.z=nb.z),f.id=g.id)}this.sortObjects&&h.sort(m);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(A(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=
+t,n.opaque=null):(n.opaque=t,n.transparent=null));else if(t=s)t.transparent?(n.transparent=t,n.opaque=null):(n.opaque=t,n.transparent=null);f.render=!0;!0===this.sortObjects&&(null!==g.renderDepth?f.z=g.renderDepth:(mb.copy(g.matrixWorld.getPosition()),$a.multiplyVector3(mb),f.z=mb.z),f.id=g.id)}this.sortObjects&&h.sort(m);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(A(g,b),g=f.object.material,g.transparent?(f.transparent=g,f.opaque=null):(f.opaque=g,f.transparent=
 null));a.overrideMaterial?(d=a.overrideMaterial,this.setBlending(d.blending,d.blendEquation,d.blendSrc,d.blendDst),this.setDepthTest(d.depthTest),this.setDepthWrite(d.depthWrite),C(d.polygonOffset,d.polygonOffsetFactor,d.polygonOffsetUnits),p(a.__webglObjects,!1,"",b,i,j,!0,d),o(a.__webglObjectsImmediate,"",b,i,j,!1,d)):(this.setBlending(THREE.NormalBlending),p(a.__webglObjects,!0,"opaque",b,i,j,!1),o(a.__webglObjectsImmediate,"opaque",b,i,j,!1),p(a.__webglObjects,!1,"transparent",b,i,j,!0),o(a.__webglObjectsImmediate,
 "transparent",b,i,j,!0));l(this.renderPluginsPost,a,b);c&&(c.generateMipmaps&&c.minFilter!==THREE.NearestFilter&&c.minFilter!==THREE.LinearFilter)&&(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)):(k.bindTexture(k.TEXTURE_2D,c.__webglTexture),k.generateMipmap(k.TEXTURE_2D),k.bindTexture(k.TEXTURE_2D,null)));this.setDepthTest(!0);this.setDepthWrite(!0)}};this.renderImmediateObject=
 function(a,b,c,d,e){var f=s(a,b,c,d,e);aa=-1;K.setMaterialFaces(d);e.immediateRenderCallback?e.immediateRenderCallback(f,k,ka):e.render(function(a){K.renderBufferImmediate(a,f,d)})};this.initWebGLObjects=function(a){a.__webglObjects||(a.__webglObjects=[],a.__webglObjectsImmediate=[],a.__webglSprites=[],a.__webglFlares=[]);for(;a.__objectsAdded.length;){var b=a.__objectsAdded[0],l=a,m=void 0,n=void 0,o=void 0;if(!b.__webglInit)if(b.__webglInit=!0,b._modelViewMatrix=new THREE.Matrix4,b._normalMatrix=
@@ -438,44 +438,44 @@ k.createBuffer();var V=void 0,O=void 0;if(R.numMorphTargets){R.__webglMorphTarge
 THREE.ParticleSystem&&(n=b.geometry,!n.__webglVertexBuffer))if(n instanceof THREE.Geometry){var S=n;S.__webglVertexBuffer=k.createBuffer();S.__webglColorBuffer=k.createBuffer();K.info.memory.geometries++;var Z=n,ca=b,U=Z.vertices.length;Z.__vertexArray=new Float32Array(3*U);Z.__colorArray=new Float32Array(3*U);Z.__sortArray=[];Z.__webglParticleCount=U;c(Z,ca);n.verticesNeedUpdate=!0;n.colorsNeedUpdate=!0}else n instanceof THREE.BufferGeometry&&h(n);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(n=
 b.geometry,n instanceof THREE.BufferGeometry)r(l.__webglObjects,n,b);else for(m in n.geometryGroups)o=n.geometryGroups[m],r(l.__webglObjects,o,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(n=b.geometry,r(l.__webglObjects,n,b)):b instanceof THREE.ImmediateRenderObject||b.immediateRenderCallback?l.__webglObjectsImmediate.push({object:b,opaque:null,transparent:null}):b instanceof THREE.Sprite?l.__webglSprites.push(b):b instanceof THREE.LensFlare&&l.__webglFlares.push(b);
 b.__webglActive=!0}a.__objectsAdded.splice(0,1)}for(;a.__objectsRemoved.length;){var aa=a.__objectsRemoved[0],ja=a;aa instanceof THREE.Mesh||aa instanceof THREE.ParticleSystem||aa instanceof THREE.Ribbon||aa instanceof THREE.Line?z(ja.__webglObjects,aa):aa instanceof THREE.Sprite?u(ja.__webglSprites,aa):aa instanceof THREE.LensFlare?u(ja.__webglFlares,aa):(aa instanceof THREE.ImmediateRenderObject||aa.immediateRenderCallback)&&z(ja.__webglObjectsImmediate,aa);aa.__webglActive=!1;a.__objectsRemoved.splice(0,
-1)}for(var wa=0,va=a.__webglObjects.length;wa<va;wa++){var ua=a.__webglObjects[wa].object,ba=ua.geometry,ta=void 0,Ca=void 0,ka=void 0;if(ua instanceof THREE.Mesh)if(ba instanceof THREE.BufferGeometry)(ba.verticesNeedUpdate||ba.elementsNeedUpdate||ba.uvsNeedUpdate||ba.normalsNeedUpdate||ba.colorsNeedUpdate||ba.tangentsNeedUpdate)&&j(ba,k.DYNAMIC_DRAW,!ba.dynamic),ba.verticesNeedUpdate=!1,ba.elementsNeedUpdate=!1,ba.uvsNeedUpdate=!1,ba.normalsNeedUpdate=!1,ba.colorsNeedUpdate=!1,ba.tangentsNeedUpdate=
-!1;else{for(var Ka=0,La=ba.geometryGroupsList.length;Ka<La;Ka++)if(ta=ba.geometryGroupsList[Ka],ka=e(ua,ta),ba.buffersNeedUpdate&&d(ta,ua),Ca=ka.attributes&&t(ka),ba.verticesNeedUpdate||ba.morphTargetsNeedUpdate||ba.elementsNeedUpdate||ba.uvsNeedUpdate||ba.normalsNeedUpdate||ba.colorsNeedUpdate||ba.tangentsNeedUpdate||Ca){var qa=ta,Na=ua,xa=k.DYNAMIC_DRAW,db=!ba.dynamic,Ua=ka;if(qa.__inittedArrays){var fb=f(Ua),hb=Ua.vertexColors?Ua.vertexColors:!1,xb=g(Ua),gb=fb===THREE.SmoothShading,F=void 0,$=
-void 0,Za=void 0,T=void 0,eb=void 0,$a=void 0,Db=void 0,nb=void 0,ab=void 0,lb=void 0,mb=void 0,W=void 0,X=void 0,Y=void 0,pa=void 0,Eb=void 0,Fb=void 0,Gb=void 0,pb=void 0,Hb=void 0,Ib=void 0,Jb=void 0,qb=void 0,Kb=void 0,Lb=void 0,Mb=void 0,yb=void 0,Nb=void 0,Ob=void 0,Pb=void 0,Ab=void 0,Qb=void 0,Rb=void 0,Sb=void 0,Bb=void 0,ya=void 0,ec=void 0,Zb=void 0,ic=void 0,jc=void 0,Ra=void 0,fc=void 0,Pa=void 0,Qa=void 0,$b=void 0,Ub=void 0,Ja=0,Oa=0,Vb=0,Wb=0,tb=0,Xa=0,Ba=0,cb=0,Ma=0,ha=0,la=0,y=0,
-za=void 0,Sa=qa.__vertexArray,nc=qa.__uvArray,oc=qa.__uv2Array,ub=qa.__normalArray,Fa=qa.__tangentArray,Ta=qa.__colorArray,Ga=qa.__skinIndexArray,Ha=qa.__skinWeightArray,Qc=qa.__morphTargetsArrays,Rc=qa.__morphNormalsArrays,Sc=qa.__webglCustomAttributesList,x=void 0,Tb=qa.__faceArray,ob=qa.__lineArray,ib=Na.geometry,vc=ib.elementsNeedUpdate,mc=ib.uvsNeedUpdate,Nc=ib.normalsNeedUpdate,Oc=ib.tangentsNeedUpdate,fd=ib.colorsNeedUpdate,gd=ib.morphTargetsNeedUpdate,cc=ib.vertices,ra=qa.faces3,sa=qa.faces4,
-Ya=ib.faces,Tc=ib.faceVertexUvs[0],Uc=ib.faceVertexUvs[1],dc=ib.skinIndices,ac=ib.skinWeights,bc=ib.morphTargets,yc=ib.morphNormals;if(ib.verticesNeedUpdate){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],W=cc[T.a],X=cc[T.b],Y=cc[T.c],Sa[Oa]=W.x,Sa[Oa+1]=W.y,Sa[Oa+2]=W.z,Sa[Oa+3]=X.x,Sa[Oa+4]=X.y,Sa[Oa+5]=X.z,Sa[Oa+6]=Y.x,Sa[Oa+7]=Y.y,Sa[Oa+8]=Y.z,Oa+=9;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],W=cc[T.a],X=cc[T.b],Y=cc[T.c],pa=cc[T.d],Sa[Oa]=W.x,Sa[Oa+1]=W.y,Sa[Oa+2]=W.z,Sa[Oa+3]=X.x,Sa[Oa+4]=X.y,Sa[Oa+5]=
-X.z,Sa[Oa+6]=Y.x,Sa[Oa+7]=Y.y,Sa[Oa+8]=Y.z,Sa[Oa+9]=pa.x,Sa[Oa+10]=pa.y,Sa[Oa+11]=pa.z,Oa+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Sa,xa)}if(gd){Ra=0;for(fc=bc.length;Ra<fc;Ra++){F=la=0;for($=ra.length;F<$;F++)$b=ra[F],T=Ya[$b],W=bc[Ra].vertices[T.a],X=bc[Ra].vertices[T.b],Y=bc[Ra].vertices[T.c],Pa=Qc[Ra],Pa[la]=W.x,Pa[la+1]=W.y,Pa[la+2]=W.z,Pa[la+3]=X.x,Pa[la+4]=X.y,Pa[la+5]=X.z,Pa[la+6]=Y.x,Pa[la+7]=Y.y,Pa[la+8]=Y.z,Ua.morphNormals&&(gb?(Ub=yc[Ra].vertexNormals[$b],
-Hb=Ub.a,Ib=Ub.b,Jb=Ub.c):Jb=Ib=Hb=yc[Ra].faceNormals[$b],Qa=Rc[Ra],Qa[la]=Hb.x,Qa[la+1]=Hb.y,Qa[la+2]=Hb.z,Qa[la+3]=Ib.x,Qa[la+4]=Ib.y,Qa[la+5]=Ib.z,Qa[la+6]=Jb.x,Qa[la+7]=Jb.y,Qa[la+8]=Jb.z),la+=9;F=0;for($=sa.length;F<$;F++)$b=sa[F],T=Ya[$b],W=bc[Ra].vertices[T.a],X=bc[Ra].vertices[T.b],Y=bc[Ra].vertices[T.c],pa=bc[Ra].vertices[T.d],Pa=Qc[Ra],Pa[la]=W.x,Pa[la+1]=W.y,Pa[la+2]=W.z,Pa[la+3]=X.x,Pa[la+4]=X.y,Pa[la+5]=X.z,Pa[la+6]=Y.x,Pa[la+7]=Y.y,Pa[la+8]=Y.z,Pa[la+9]=pa.x,Pa[la+10]=pa.y,Pa[la+11]=
-pa.z,Ua.morphNormals&&(gb?(Ub=yc[Ra].vertexNormals[$b],Hb=Ub.a,Ib=Ub.b,Jb=Ub.c,qb=Ub.d):qb=Jb=Ib=Hb=yc[Ra].faceNormals[$b],Qa=Rc[Ra],Qa[la]=Hb.x,Qa[la+1]=Hb.y,Qa[la+2]=Hb.z,Qa[la+3]=Ib.x,Qa[la+4]=Ib.y,Qa[la+5]=Ib.z,Qa[la+6]=Jb.x,Qa[la+7]=Jb.y,Qa[la+8]=Jb.z,Qa[la+9]=qb.x,Qa[la+10]=qb.y,Qa[la+11]=qb.z),la+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphTargetsBuffers[Ra]);k.bufferData(k.ARRAY_BUFFER,Qc[Ra],xa);Ua.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphNormalsBuffers[Ra]),k.bufferData(k.ARRAY_BUFFER,
-Rc[Ra],xa))}}if(ac.length){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],Nb=ac[T.a],Ob=ac[T.b],Pb=ac[T.c],Ha[ha]=Nb.x,Ha[ha+1]=Nb.y,Ha[ha+2]=Nb.z,Ha[ha+3]=Nb.w,Ha[ha+4]=Ob.x,Ha[ha+5]=Ob.y,Ha[ha+6]=Ob.z,Ha[ha+7]=Ob.w,Ha[ha+8]=Pb.x,Ha[ha+9]=Pb.y,Ha[ha+10]=Pb.z,Ha[ha+11]=Pb.w,Qb=dc[T.a],Rb=dc[T.b],Sb=dc[T.c],Ga[ha]=Qb.x,Ga[ha+1]=Qb.y,Ga[ha+2]=Qb.z,Ga[ha+3]=Qb.w,Ga[ha+4]=Rb.x,Ga[ha+5]=Rb.y,Ga[ha+6]=Rb.z,Ga[ha+7]=Rb.w,Ga[ha+8]=Sb.x,Ga[ha+9]=Sb.y,Ga[ha+10]=Sb.z,Ga[ha+11]=Sb.w,ha+=12;F=0;for($=sa.length;F<$;F++)T=
-Ya[sa[F]],Nb=ac[T.a],Ob=ac[T.b],Pb=ac[T.c],Ab=ac[T.d],Ha[ha]=Nb.x,Ha[ha+1]=Nb.y,Ha[ha+2]=Nb.z,Ha[ha+3]=Nb.w,Ha[ha+4]=Ob.x,Ha[ha+5]=Ob.y,Ha[ha+6]=Ob.z,Ha[ha+7]=Ob.w,Ha[ha+8]=Pb.x,Ha[ha+9]=Pb.y,Ha[ha+10]=Pb.z,Ha[ha+11]=Pb.w,Ha[ha+12]=Ab.x,Ha[ha+13]=Ab.y,Ha[ha+14]=Ab.z,Ha[ha+15]=Ab.w,Qb=dc[T.a],Rb=dc[T.b],Sb=dc[T.c],Bb=dc[T.d],Ga[ha]=Qb.x,Ga[ha+1]=Qb.y,Ga[ha+2]=Qb.z,Ga[ha+3]=Qb.w,Ga[ha+4]=Rb.x,Ga[ha+5]=Rb.y,Ga[ha+6]=Rb.z,Ga[ha+7]=Rb.w,Ga[ha+8]=Sb.x,Ga[ha+9]=Sb.y,Ga[ha+10]=Sb.z,Ga[ha+11]=Sb.w,Ga[ha+12]=
-Bb.x,Ga[ha+13]=Bb.y,Ga[ha+14]=Bb.z,Ga[ha+15]=Bb.w,ha+=16;0<ha&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Ga,xa),k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Ha,xa))}if(fd&&hb){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],Db=T.vertexColors,nb=T.color,3===Db.length&&hb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2]):Mb=Lb=Kb=nb,Ta[Ma]=Kb.r,Ta[Ma+1]=Kb.g,Ta[Ma+2]=Kb.b,Ta[Ma+3]=Lb.r,Ta[Ma+4]=Lb.g,Ta[Ma+5]=Lb.b,Ta[Ma+6]=Mb.r,
-Ta[Ma+7]=Mb.g,Ta[Ma+8]=Mb.b,Ma+=9;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],Db=T.vertexColors,nb=T.color,4===Db.length&&hb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2],yb=Db[3]):yb=Mb=Lb=Kb=nb,Ta[Ma]=Kb.r,Ta[Ma+1]=Kb.g,Ta[Ma+2]=Kb.b,Ta[Ma+3]=Lb.r,Ta[Ma+4]=Lb.g,Ta[Ma+5]=Lb.b,Ta[Ma+6]=Mb.r,Ta[Ma+7]=Mb.g,Ta[Ma+8]=Mb.b,Ta[Ma+9]=yb.r,Ta[Ma+10]=yb.g,Ta[Ma+11]=yb.b,Ma+=12;0<Ma&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Ta,xa))}if(Oc&&ib.hasTangents){F=0;for($=ra.length;F<
-$;F++)T=Ya[ra[F]],ab=T.vertexTangents,Eb=ab[0],Fb=ab[1],Gb=ab[2],Fa[Ba]=Eb.x,Fa[Ba+1]=Eb.y,Fa[Ba+2]=Eb.z,Fa[Ba+3]=Eb.w,Fa[Ba+4]=Fb.x,Fa[Ba+5]=Fb.y,Fa[Ba+6]=Fb.z,Fa[Ba+7]=Fb.w,Fa[Ba+8]=Gb.x,Fa[Ba+9]=Gb.y,Fa[Ba+10]=Gb.z,Fa[Ba+11]=Gb.w,Ba+=12;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],ab=T.vertexTangents,Eb=ab[0],Fb=ab[1],Gb=ab[2],pb=ab[3],Fa[Ba]=Eb.x,Fa[Ba+1]=Eb.y,Fa[Ba+2]=Eb.z,Fa[Ba+3]=Eb.w,Fa[Ba+4]=Fb.x,Fa[Ba+5]=Fb.y,Fa[Ba+6]=Fb.z,Fa[Ba+7]=Fb.w,Fa[Ba+8]=Gb.x,Fa[Ba+9]=Gb.y,Fa[Ba+10]=Gb.z,Fa[Ba+11]=Gb.w,
-Fa[Ba+12]=pb.x,Fa[Ba+13]=pb.y,Fa[Ba+14]=pb.z,Fa[Ba+15]=pb.w,Ba+=16;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Fa,xa)}if(Nc&&fb){F=0;for($=ra.length;F<$;F++)if(T=Ya[ra[F]],eb=T.vertexNormals,$a=T.normal,3===eb.length&&gb)for(ya=0;3>ya;ya++)Zb=eb[ya],ub[Xa]=Zb.x,ub[Xa+1]=Zb.y,ub[Xa+2]=Zb.z,Xa+=3;else for(ya=0;3>ya;ya++)ub[Xa]=$a.x,ub[Xa+1]=$a.y,ub[Xa+2]=$a.z,Xa+=3;F=0;for($=sa.length;F<$;F++)if(T=Ya[sa[F]],eb=T.vertexNormals,$a=T.normal,4===eb.length&&gb)for(ya=
-0;4>ya;ya++)Zb=eb[ya],ub[Xa]=Zb.x,ub[Xa+1]=Zb.y,ub[Xa+2]=Zb.z,Xa+=3;else for(ya=0;4>ya;ya++)ub[Xa]=$a.x,ub[Xa+1]=$a.y,ub[Xa+2]=$a.z,Xa+=3;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,ub,xa)}if(mc&&Tc&&xb){F=0;for($=ra.length;F<$;F++)if(Za=ra[F],lb=Tc[Za],void 0!==lb)for(ya=0;3>ya;ya++)ic=lb[ya],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;F=0;for($=sa.length;F<$;F++)if(Za=sa[F],lb=Tc[Za],void 0!==lb)for(ya=0;4>ya;ya++)ic=lb[ya],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;0<Vb&&(k.bindBuffer(k.ARRAY_BUFFER,
-qa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,nc,xa))}if(mc&&Uc&&xb){F=0;for($=ra.length;F<$;F++)if(Za=ra[F],mb=Uc[Za],void 0!==mb)for(ya=0;3>ya;ya++)jc=mb[ya],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;F=0;for($=sa.length;F<$;F++)if(Za=sa[F],mb=Uc[Za],void 0!==mb)for(ya=0;4>ya;ya++)jc=mb[ya],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;0<Wb&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,oc,xa))}if(vc){F=0;for($=ra.length;F<$;F++)Tb[tb]=Ja,Tb[tb+1]=Ja+1,Tb[tb+2]=Ja+2,tb+=3,ob[cb]=Ja,ob[cb+
-1]=Ja+1,ob[cb+2]=Ja,ob[cb+3]=Ja+2,ob[cb+4]=Ja+1,ob[cb+5]=Ja+2,cb+=6,Ja+=3;F=0;for($=sa.length;F<$;F++)Tb[tb]=Ja,Tb[tb+1]=Ja+1,Tb[tb+2]=Ja+3,Tb[tb+3]=Ja+1,Tb[tb+4]=Ja+2,Tb[tb+5]=Ja+3,tb+=6,ob[cb]=Ja,ob[cb+1]=Ja+1,ob[cb+2]=Ja,ob[cb+3]=Ja+3,ob[cb+4]=Ja+1,ob[cb+5]=Ja+2,ob[cb+6]=Ja+2,ob[cb+7]=Ja+3,cb+=8,Ja+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Tb,xa);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,
-ob,xa)}if(Sc){ya=0;for(ec=Sc.length;ya<ec;ya++)if(x=Sc[ya],x.__original.needsUpdate){y=0;if(1===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],y+=3;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],x.array[y+3]=x.value[T.d],y+=4}else{if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)za=x.value[ra[F]],x.array[y]=
-za,x.array[y+1]=za,x.array[y+2]=za,y+=3;F=0;for($=sa.length;F<$;F++)za=x.value[sa[F]],x.array[y]=za,x.array[y+1]=za,x.array[y+2]=za,x.array[y+3]=za,y+=4}}else if(2===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,y+=6;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],pa=x.value[T.d],
-x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}else{if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)Y=X=W=za=x.value[ra[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,y+=6;F=0;for($=sa.length;F<$;F++)pa=Y=X=W=za=x.value[sa[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,x.array[y+6]=pa.x,x.array[y+
-7]=pa.y,y+=8}}else if(3===x.size){var ea;ea="c"===x.type?["r","g","b"]:["x","y","z"];if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],y+=9;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],
-pa=x.value[T.d],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],x.array[y+9]=pa[ea[0]],x.array[y+10]=pa[ea[1]],x.array[y+11]=pa[ea[2]],y+=12}else if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)Y=X=W=za=x.value[ra[F]],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+
-6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],y+=9;F=0;for($=sa.length;F<$;F++)pa=Y=X=W=za=x.value[sa[F]],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],x.array[y+9]=pa[ea[0]],x.array[y+10]=pa[ea[1]],x.array[y+11]=pa[ea[2]],y+=12}else if("faceVertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)za=x.value[ra[F]],W=za[0],X=za[1],Y=za[2],x.array[y]=
-W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],y+=9;F=0;for($=sa.length;F<$;F++)za=x.value[sa[F]],W=za[0],X=za[1],Y=za[2],pa=za[3],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],x.array[y+9]=pa[ea[0]],x.array[y+10]=
-pa[ea[1]],x.array[y+11]=pa[ea[2]],y+=12}}else if(4===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Ya[ra[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,y+=12;F=0;for($=sa.length;F<$;F++)T=Ya[sa[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],pa=x.value[T.d],
-x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)Y=X=W=za=x.value[ra[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,
-x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,y+=12;F=0;for($=sa.length;F<$;F++)pa=Y=X=W=za=x.value[sa[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faceVertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)za=x.value[ra[F]],W=
-za[0],X=za[1],Y=za[2],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,y+=12;F=0;for($=sa.length;F<$;F++)za=x.value[sa[F]],W=za[0],X=za[1],Y=za[2],pa=za[3],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+
-11]=Y.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,x.buffer);k.bufferData(k.ARRAY_BUFFER,x.array,xa)}}db&&(delete qa.__inittedArrays,delete qa.__colorArray,delete qa.__normalArray,delete qa.__tangentArray,delete qa.__uvArray,delete qa.__uv2Array,delete qa.__faceArray,delete qa.__vertexArray,delete qa.__lineArray,delete qa.__skinIndexArray,delete qa.__skinWeightArray)}}ba.verticesNeedUpdate=!1;ba.morphTargetsNeedUpdate=!1;ba.elementsNeedUpdate=
-!1;ba.uvsNeedUpdate=!1;ba.normalsNeedUpdate=!1;ba.colorsNeedUpdate=!1;ba.tangentsNeedUpdate=!1;ba.buffersNeedUpdate=!1;ka.attributes&&q(ka)}else if(ua instanceof THREE.Ribbon){ka=e(ua,ba);Ca=ka.attributes&&t(ka);if(ba.verticesNeedUpdate||ba.colorsNeedUpdate||ba.normalsNeedUpdate||Ca){var vb=ba,zc=k.DYNAMIC_DRAW,pc=void 0,qc=void 0,rc=void 0,Ac=void 0,Aa=void 0,Bc=void 0,Cc=void 0,Dc=void 0,Xc=void 0,Va=void 0,kc=void 0,Da=void 0,jb=void 0,Yc=vb.vertices,Zc=vb.colors,$c=vb.normals,hd=Yc.length,id=
-Zc.length,jd=$c.length,Ec=vb.__vertexArray,Fc=vb.__colorArray,Gc=vb.__normalArray,kd=vb.colorsNeedUpdate,ld=vb.normalsNeedUpdate,Vc=vb.__webglCustomAttributesList;if(vb.verticesNeedUpdate){for(pc=0;pc<hd;pc++)Ac=Yc[pc],Aa=3*pc,Ec[Aa]=Ac.x,Ec[Aa+1]=Ac.y,Ec[Aa+2]=Ac.z;k.bindBuffer(k.ARRAY_BUFFER,vb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ec,zc)}if(kd){for(qc=0;qc<id;qc++)Bc=Zc[qc],Aa=3*qc,Fc[Aa]=Bc.r,Fc[Aa+1]=Bc.g,Fc[Aa+2]=Bc.b;k.bindBuffer(k.ARRAY_BUFFER,vb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,
-Fc,zc)}if(ld){for(rc=0;rc<jd;rc++)Cc=$c[rc],Aa=3*rc,Gc[Aa]=Cc.x,Gc[Aa+1]=Cc.y,Gc[Aa+2]=Cc.z;k.bindBuffer(k.ARRAY_BUFFER,vb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Gc,zc)}if(Vc){Dc=0;for(Xc=Vc.length;Dc<Xc;Dc++)if(Da=Vc[Dc],Da.needsUpdate&&(void 0===Da.boundTo||"vertices"===Da.boundTo)){Aa=0;kc=Da.value.length;if(1===Da.size)for(Va=0;Va<kc;Va++)Da.array[Va]=Da.value[Va];else if(2===Da.size)for(Va=0;Va<kc;Va++)jb=Da.value[Va],Da.array[Aa]=jb.x,Da.array[Aa+1]=jb.y,Aa+=2;else if(3===Da.size)if("c"===
-Da.type)for(Va=0;Va<kc;Va++)jb=Da.value[Va],Da.array[Aa]=jb.r,Da.array[Aa+1]=jb.g,Da.array[Aa+2]=jb.b,Aa+=3;else for(Va=0;Va<kc;Va++)jb=Da.value[Va],Da.array[Aa]=jb.x,Da.array[Aa+1]=jb.y,Da.array[Aa+2]=jb.z,Aa+=3;else if(4===Da.size)for(Va=0;Va<kc;Va++)jb=Da.value[Va],Da.array[Aa]=jb.x,Da.array[Aa+1]=jb.y,Da.array[Aa+2]=jb.z,Da.array[Aa+3]=jb.w,Aa+=4;k.bindBuffer(k.ARRAY_BUFFER,Da.buffer);k.bufferData(k.ARRAY_BUFFER,Da.array,zc)}}}ba.verticesNeedUpdate=!1;ba.colorsNeedUpdate=!1;ba.normalsNeedUpdate=
-!1;ka.attributes&&q(ka)}else if(ua instanceof THREE.Line){ka=e(ua,ba);Ca=ka.attributes&&t(ka);if(ba.verticesNeedUpdate||ba.colorsNeedUpdate||ba.lineDistancesNeedUpdate||Ca){var wb=ba,Hc=k.DYNAMIC_DRAW,sc=void 0,tc=void 0,uc=void 0,Ic=void 0,Ia=void 0,Jc=void 0,ad=wb.vertices,bd=wb.colors,cd=wb.lineDistances,md=ad.length,nd=bd.length,od=cd.length,Kc=wb.__vertexArray,Lc=wb.__colorArray,dd=wb.__lineDistanceArray,pd=wb.colorsNeedUpdate,qd=wb.lineDistancesNeedUpdate,Wc=wb.__webglCustomAttributesList,Mc=
-void 0,ed=void 0,Wa=void 0,lc=void 0,kb=void 0,Ea=void 0;if(wb.verticesNeedUpdate){for(sc=0;sc<md;sc++)Ic=ad[sc],Ia=3*sc,Kc[Ia]=Ic.x,Kc[Ia+1]=Ic.y,Kc[Ia+2]=Ic.z;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Kc,Hc)}if(pd){for(tc=0;tc<nd;tc++)Jc=bd[tc],Ia=3*tc,Lc[Ia]=Jc.r,Lc[Ia+1]=Jc.g,Lc[Ia+2]=Jc.b;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Lc,Hc)}if(qd){for(uc=0;uc<od;uc++)dd[uc]=cd[uc];k.bindBuffer(k.ARRAY_BUFFER,wb.__webglLineDistanceBuffer);
-k.bufferData(k.ARRAY_BUFFER,dd,Hc)}if(Wc){Mc=0;for(ed=Wc.length;Mc<ed;Mc++)if(Ea=Wc[Mc],Ea.needsUpdate&&(void 0===Ea.boundTo||"vertices"===Ea.boundTo)){Ia=0;lc=Ea.value.length;if(1===Ea.size)for(Wa=0;Wa<lc;Wa++)Ea.array[Wa]=Ea.value[Wa];else if(2===Ea.size)for(Wa=0;Wa<lc;Wa++)kb=Ea.value[Wa],Ea.array[Ia]=kb.x,Ea.array[Ia+1]=kb.y,Ia+=2;else if(3===Ea.size)if("c"===Ea.type)for(Wa=0;Wa<lc;Wa++)kb=Ea.value[Wa],Ea.array[Ia]=kb.r,Ea.array[Ia+1]=kb.g,Ea.array[Ia+2]=kb.b,Ia+=3;else for(Wa=0;Wa<lc;Wa++)kb=
-Ea.value[Wa],Ea.array[Ia]=kb.x,Ea.array[Ia+1]=kb.y,Ea.array[Ia+2]=kb.z,Ia+=3;else if(4===Ea.size)for(Wa=0;Wa<lc;Wa++)kb=Ea.value[Wa],Ea.array[Ia]=kb.x,Ea.array[Ia+1]=kb.y,Ea.array[Ia+2]=kb.z,Ea.array[Ia+3]=kb.w,Ia+=4;k.bindBuffer(k.ARRAY_BUFFER,Ea.buffer);k.bufferData(k.ARRAY_BUFFER,Ea.array,Hc)}}}ba.verticesNeedUpdate=!1;ba.colorsNeedUpdate=!1;ba.lineDistancesNeedUpdate=!1;ka.attributes&&q(ka)}else ua instanceof THREE.ParticleSystem&&(ba instanceof THREE.BufferGeometry?((ba.verticesNeedUpdate||ba.colorsNeedUpdate)&&
-j(ba,k.DYNAMIC_DRAW,!ba.dynamic),ba.verticesNeedUpdate=!1,ba.colorsNeedUpdate=!1):(ka=e(ua,ba),Ca=ka.attributes&&t(ka),(ba.verticesNeedUpdate||ba.colorsNeedUpdate||ua.sortParticles||Ca)&&i(ba,k.DYNAMIC_DRAW,ua),ba.verticesNeedUpdate=!1,ba.colorsNeedUpdate=!1,ka.attributes&&q(ka)))}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,l,n,m;a instanceof THREE.MeshDepthMaterial?m="depth":a instanceof THREE.MeshNormalMaterial?m="normal":a instanceof THREE.MeshBasicMaterial?m="basic":a instanceof THREE.MeshLambertMaterial?
+1)}for(var Aa=0,va=a.__webglObjects.length;Aa<va;Aa++){var ua=a.__webglObjects[Aa].object,ba=ua.geometry,ta=void 0,Ba=void 0,ka=void 0;if(ua instanceof THREE.Mesh)if(ba instanceof THREE.BufferGeometry)(ba.verticesNeedUpdate||ba.elementsNeedUpdate||ba.uvsNeedUpdate||ba.normalsNeedUpdate||ba.colorsNeedUpdate||ba.tangentsNeedUpdate)&&j(ba,k.DYNAMIC_DRAW,!ba.dynamic),ba.verticesNeedUpdate=!1,ba.elementsNeedUpdate=!1,ba.uvsNeedUpdate=!1,ba.normalsNeedUpdate=!1,ba.colorsNeedUpdate=!1,ba.tangentsNeedUpdate=
+!1;else{for(var Ka=0,La=ba.geometryGroupsList.length;Ka<La;Ka++)if(ta=ba.geometryGroupsList[Ka],ka=e(ua,ta),ba.buffersNeedUpdate&&d(ta,ua),Ba=ka.attributes&&t(ka),ba.verticesNeedUpdate||ba.morphTargetsNeedUpdate||ba.elementsNeedUpdate||ba.uvsNeedUpdate||ba.normalsNeedUpdate||ba.colorsNeedUpdate||ba.tangentsNeedUpdate||Ba){var qa=ta,Na=ua,wa=k.DYNAMIC_DRAW,eb=!ba.dynamic,Ya=ka;if(qa.__inittedArrays){var fb=f(Ya),kb=Ya.vertexColors?Ya.vertexColors:!1,nb=g(Ya),gb=fb===THREE.SmoothShading,F=void 0,$=
+void 0,Za=void 0,T=void 0,db=void 0,$a=void 0,Db=void 0,mb=void 0,ab=void 0,lb=void 0,ob=void 0,W=void 0,X=void 0,Y=void 0,pa=void 0,Eb=void 0,Fb=void 0,Gb=void 0,qb=void 0,Hb=void 0,Ib=void 0,Jb=void 0,xb=void 0,Kb=void 0,Lb=void 0,Mb=void 0,zb=void 0,Nb=void 0,Ob=void 0,Pb=void 0,Ab=void 0,Qb=void 0,Rb=void 0,Sb=void 0,Bb=void 0,xa=void 0,ec=void 0,Zb=void 0,ic=void 0,jc=void 0,Ra=void 0,fc=void 0,Pa=void 0,Qa=void 0,$b=void 0,Ub=void 0,Ja=0,Oa=0,Vb=0,Wb=0,tb=0,Wa=0,Ca=0,cb=0,Ma=0,ha=0,la=0,y=0,
+ya=void 0,Sa=qa.__vertexArray,nc=qa.__uvArray,oc=qa.__uv2Array,ub=qa.__normalArray,Fa=qa.__tangentArray,Ta=qa.__colorArray,Ga=qa.__skinIndexArray,Ha=qa.__skinWeightArray,Qc=qa.__morphTargetsArrays,Rc=qa.__morphNormalsArrays,Sc=qa.__webglCustomAttributesList,x=void 0,Tb=qa.__faceArray,pb=qa.__lineArray,hb=Na.geometry,vc=hb.elementsNeedUpdate,mc=hb.uvsNeedUpdate,Nc=hb.normalsNeedUpdate,Oc=hb.tangentsNeedUpdate,fd=hb.colorsNeedUpdate,gd=hb.morphTargetsNeedUpdate,cc=hb.vertices,ra=qa.faces3,sa=qa.faces4,
+Xa=hb.faces,Tc=hb.faceVertexUvs[0],Uc=hb.faceVertexUvs[1],dc=hb.skinIndices,ac=hb.skinWeights,bc=hb.morphTargets,yc=hb.morphNormals;if(hb.verticesNeedUpdate){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],W=cc[T.a],X=cc[T.b],Y=cc[T.c],Sa[Oa]=W.x,Sa[Oa+1]=W.y,Sa[Oa+2]=W.z,Sa[Oa+3]=X.x,Sa[Oa+4]=X.y,Sa[Oa+5]=X.z,Sa[Oa+6]=Y.x,Sa[Oa+7]=Y.y,Sa[Oa+8]=Y.z,Oa+=9;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],W=cc[T.a],X=cc[T.b],Y=cc[T.c],pa=cc[T.d],Sa[Oa]=W.x,Sa[Oa+1]=W.y,Sa[Oa+2]=W.z,Sa[Oa+3]=X.x,Sa[Oa+4]=X.y,Sa[Oa+5]=
+X.z,Sa[Oa+6]=Y.x,Sa[Oa+7]=Y.y,Sa[Oa+8]=Y.z,Sa[Oa+9]=pa.x,Sa[Oa+10]=pa.y,Sa[Oa+11]=pa.z,Oa+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Sa,wa)}if(gd){Ra=0;for(fc=bc.length;Ra<fc;Ra++){F=la=0;for($=ra.length;F<$;F++)$b=ra[F],T=Xa[$b],W=bc[Ra].vertices[T.a],X=bc[Ra].vertices[T.b],Y=bc[Ra].vertices[T.c],Pa=Qc[Ra],Pa[la]=W.x,Pa[la+1]=W.y,Pa[la+2]=W.z,Pa[la+3]=X.x,Pa[la+4]=X.y,Pa[la+5]=X.z,Pa[la+6]=Y.x,Pa[la+7]=Y.y,Pa[la+8]=Y.z,Ya.morphNormals&&(gb?(Ub=yc[Ra].vertexNormals[$b],
+Hb=Ub.a,Ib=Ub.b,Jb=Ub.c):Jb=Ib=Hb=yc[Ra].faceNormals[$b],Qa=Rc[Ra],Qa[la]=Hb.x,Qa[la+1]=Hb.y,Qa[la+2]=Hb.z,Qa[la+3]=Ib.x,Qa[la+4]=Ib.y,Qa[la+5]=Ib.z,Qa[la+6]=Jb.x,Qa[la+7]=Jb.y,Qa[la+8]=Jb.z),la+=9;F=0;for($=sa.length;F<$;F++)$b=sa[F],T=Xa[$b],W=bc[Ra].vertices[T.a],X=bc[Ra].vertices[T.b],Y=bc[Ra].vertices[T.c],pa=bc[Ra].vertices[T.d],Pa=Qc[Ra],Pa[la]=W.x,Pa[la+1]=W.y,Pa[la+2]=W.z,Pa[la+3]=X.x,Pa[la+4]=X.y,Pa[la+5]=X.z,Pa[la+6]=Y.x,Pa[la+7]=Y.y,Pa[la+8]=Y.z,Pa[la+9]=pa.x,Pa[la+10]=pa.y,Pa[la+11]=
+pa.z,Ya.morphNormals&&(gb?(Ub=yc[Ra].vertexNormals[$b],Hb=Ub.a,Ib=Ub.b,Jb=Ub.c,xb=Ub.d):xb=Jb=Ib=Hb=yc[Ra].faceNormals[$b],Qa=Rc[Ra],Qa[la]=Hb.x,Qa[la+1]=Hb.y,Qa[la+2]=Hb.z,Qa[la+3]=Ib.x,Qa[la+4]=Ib.y,Qa[la+5]=Ib.z,Qa[la+6]=Jb.x,Qa[la+7]=Jb.y,Qa[la+8]=Jb.z,Qa[la+9]=xb.x,Qa[la+10]=xb.y,Qa[la+11]=xb.z),la+=12;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphTargetsBuffers[Ra]);k.bufferData(k.ARRAY_BUFFER,Qc[Ra],wa);Ya.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglMorphNormalsBuffers[Ra]),k.bufferData(k.ARRAY_BUFFER,
+Rc[Ra],wa))}}if(ac.length){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],Nb=ac[T.a],Ob=ac[T.b],Pb=ac[T.c],Ha[ha]=Nb.x,Ha[ha+1]=Nb.y,Ha[ha+2]=Nb.z,Ha[ha+3]=Nb.w,Ha[ha+4]=Ob.x,Ha[ha+5]=Ob.y,Ha[ha+6]=Ob.z,Ha[ha+7]=Ob.w,Ha[ha+8]=Pb.x,Ha[ha+9]=Pb.y,Ha[ha+10]=Pb.z,Ha[ha+11]=Pb.w,Qb=dc[T.a],Rb=dc[T.b],Sb=dc[T.c],Ga[ha]=Qb.x,Ga[ha+1]=Qb.y,Ga[ha+2]=Qb.z,Ga[ha+3]=Qb.w,Ga[ha+4]=Rb.x,Ga[ha+5]=Rb.y,Ga[ha+6]=Rb.z,Ga[ha+7]=Rb.w,Ga[ha+8]=Sb.x,Ga[ha+9]=Sb.y,Ga[ha+10]=Sb.z,Ga[ha+11]=Sb.w,ha+=12;F=0;for($=sa.length;F<$;F++)T=
+Xa[sa[F]],Nb=ac[T.a],Ob=ac[T.b],Pb=ac[T.c],Ab=ac[T.d],Ha[ha]=Nb.x,Ha[ha+1]=Nb.y,Ha[ha+2]=Nb.z,Ha[ha+3]=Nb.w,Ha[ha+4]=Ob.x,Ha[ha+5]=Ob.y,Ha[ha+6]=Ob.z,Ha[ha+7]=Ob.w,Ha[ha+8]=Pb.x,Ha[ha+9]=Pb.y,Ha[ha+10]=Pb.z,Ha[ha+11]=Pb.w,Ha[ha+12]=Ab.x,Ha[ha+13]=Ab.y,Ha[ha+14]=Ab.z,Ha[ha+15]=Ab.w,Qb=dc[T.a],Rb=dc[T.b],Sb=dc[T.c],Bb=dc[T.d],Ga[ha]=Qb.x,Ga[ha+1]=Qb.y,Ga[ha+2]=Qb.z,Ga[ha+3]=Qb.w,Ga[ha+4]=Rb.x,Ga[ha+5]=Rb.y,Ga[ha+6]=Rb.z,Ga[ha+7]=Rb.w,Ga[ha+8]=Sb.x,Ga[ha+9]=Sb.y,Ga[ha+10]=Sb.z,Ga[ha+11]=Sb.w,Ga[ha+12]=
+Bb.x,Ga[ha+13]=Bb.y,Ga[ha+14]=Bb.z,Ga[ha+15]=Bb.w,ha+=16;0<ha&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Ga,wa),k.bindBuffer(k.ARRAY_BUFFER,qa.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Ha,wa))}if(fd&&kb){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],Db=T.vertexColors,mb=T.color,3===Db.length&&kb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2]):Mb=Lb=Kb=mb,Ta[Ma]=Kb.r,Ta[Ma+1]=Kb.g,Ta[Ma+2]=Kb.b,Ta[Ma+3]=Lb.r,Ta[Ma+4]=Lb.g,Ta[Ma+5]=Lb.b,Ta[Ma+6]=Mb.r,
+Ta[Ma+7]=Mb.g,Ta[Ma+8]=Mb.b,Ma+=9;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],Db=T.vertexColors,mb=T.color,4===Db.length&&kb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2],zb=Db[3]):zb=Mb=Lb=Kb=mb,Ta[Ma]=Kb.r,Ta[Ma+1]=Kb.g,Ta[Ma+2]=Kb.b,Ta[Ma+3]=Lb.r,Ta[Ma+4]=Lb.g,Ta[Ma+5]=Lb.b,Ta[Ma+6]=Mb.r,Ta[Ma+7]=Mb.g,Ta[Ma+8]=Mb.b,Ta[Ma+9]=zb.r,Ta[Ma+10]=zb.g,Ta[Ma+11]=zb.b,Ma+=12;0<Ma&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Ta,wa))}if(Oc&&hb.hasTangents){F=0;for($=ra.length;F<
+$;F++)T=Xa[ra[F]],ab=T.vertexTangents,Eb=ab[0],Fb=ab[1],Gb=ab[2],Fa[Ca]=Eb.x,Fa[Ca+1]=Eb.y,Fa[Ca+2]=Eb.z,Fa[Ca+3]=Eb.w,Fa[Ca+4]=Fb.x,Fa[Ca+5]=Fb.y,Fa[Ca+6]=Fb.z,Fa[Ca+7]=Fb.w,Fa[Ca+8]=Gb.x,Fa[Ca+9]=Gb.y,Fa[Ca+10]=Gb.z,Fa[Ca+11]=Gb.w,Ca+=12;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],ab=T.vertexTangents,Eb=ab[0],Fb=ab[1],Gb=ab[2],qb=ab[3],Fa[Ca]=Eb.x,Fa[Ca+1]=Eb.y,Fa[Ca+2]=Eb.z,Fa[Ca+3]=Eb.w,Fa[Ca+4]=Fb.x,Fa[Ca+5]=Fb.y,Fa[Ca+6]=Fb.z,Fa[Ca+7]=Fb.w,Fa[Ca+8]=Gb.x,Fa[Ca+9]=Gb.y,Fa[Ca+10]=Gb.z,Fa[Ca+11]=Gb.w,
+Fa[Ca+12]=qb.x,Fa[Ca+13]=qb.y,Fa[Ca+14]=qb.z,Fa[Ca+15]=qb.w,Ca+=16;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Fa,wa)}if(Nc&&fb){F=0;for($=ra.length;F<$;F++)if(T=Xa[ra[F]],db=T.vertexNormals,$a=T.normal,3===db.length&&gb)for(xa=0;3>xa;xa++)Zb=db[xa],ub[Wa]=Zb.x,ub[Wa+1]=Zb.y,ub[Wa+2]=Zb.z,Wa+=3;else for(xa=0;3>xa;xa++)ub[Wa]=$a.x,ub[Wa+1]=$a.y,ub[Wa+2]=$a.z,Wa+=3;F=0;for($=sa.length;F<$;F++)if(T=Xa[sa[F]],db=T.vertexNormals,$a=T.normal,4===db.length&&gb)for(xa=
+0;4>xa;xa++)Zb=db[xa],ub[Wa]=Zb.x,ub[Wa+1]=Zb.y,ub[Wa+2]=Zb.z,Wa+=3;else for(xa=0;4>xa;xa++)ub[Wa]=$a.x,ub[Wa+1]=$a.y,ub[Wa+2]=$a.z,Wa+=3;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,ub,wa)}if(mc&&Tc&&nb){F=0;for($=ra.length;F<$;F++)if(Za=ra[F],lb=Tc[Za],void 0!==lb)for(xa=0;3>xa;xa++)ic=lb[xa],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;F=0;for($=sa.length;F<$;F++)if(Za=sa[F],lb=Tc[Za],void 0!==lb)for(xa=0;4>xa;xa++)ic=lb[xa],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;0<Vb&&(k.bindBuffer(k.ARRAY_BUFFER,
+qa.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,nc,wa))}if(mc&&Uc&&nb){F=0;for($=ra.length;F<$;F++)if(Za=ra[F],ob=Uc[Za],void 0!==ob)for(xa=0;3>xa;xa++)jc=ob[xa],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;F=0;for($=sa.length;F<$;F++)if(Za=sa[F],ob=Uc[Za],void 0!==ob)for(xa=0;4>xa;xa++)jc=ob[xa],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;0<Wb&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,oc,wa))}if(vc){F=0;for($=ra.length;F<$;F++)Tb[tb]=Ja,Tb[tb+1]=Ja+1,Tb[tb+2]=Ja+2,tb+=3,pb[cb]=Ja,pb[cb+
+1]=Ja+1,pb[cb+2]=Ja,pb[cb+3]=Ja+2,pb[cb+4]=Ja+1,pb[cb+5]=Ja+2,cb+=6,Ja+=3;F=0;for($=sa.length;F<$;F++)Tb[tb]=Ja,Tb[tb+1]=Ja+1,Tb[tb+2]=Ja+3,Tb[tb+3]=Ja+1,Tb[tb+4]=Ja+2,Tb[tb+5]=Ja+3,tb+=6,pb[cb]=Ja,pb[cb+1]=Ja+1,pb[cb+2]=Ja,pb[cb+3]=Ja+3,pb[cb+4]=Ja+1,pb[cb+5]=Ja+2,pb[cb+6]=Ja+2,pb[cb+7]=Ja+3,cb+=8,Ja+=4;k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Tb,wa);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,qa.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,
+pb,wa)}if(Sc){xa=0;for(ec=Sc.length;xa<ec;xa++)if(x=Sc[xa],x.__original.needsUpdate){y=0;if(1===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],y+=3;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],x.array[y]=x.value[T.a],x.array[y+1]=x.value[T.b],x.array[y+2]=x.value[T.c],x.array[y+3]=x.value[T.d],y+=4}else{if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)ya=x.value[ra[F]],x.array[y]=
+ya,x.array[y+1]=ya,x.array[y+2]=ya,y+=3;F=0;for($=sa.length;F<$;F++)ya=x.value[sa[F]],x.array[y]=ya,x.array[y+1]=ya,x.array[y+2]=ya,x.array[y+3]=ya,y+=4}}else if(2===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,y+=6;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],pa=x.value[T.d],
+x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}else{if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)Y=X=W=ya=x.value[ra[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,y+=6;F=0;for($=sa.length;F<$;F++)pa=Y=X=W=ya=x.value[sa[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=X.x,x.array[y+3]=X.y,x.array[y+4]=Y.x,x.array[y+5]=Y.y,x.array[y+6]=pa.x,x.array[y+
+7]=pa.y,y+=8}}else if(3===x.size){var ea;ea="c"===x.type?["r","g","b"]:["x","y","z"];if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],y+=9;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],
+pa=x.value[T.d],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],x.array[y+9]=pa[ea[0]],x.array[y+10]=pa[ea[1]],x.array[y+11]=pa[ea[2]],y+=12}else if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)Y=X=W=ya=x.value[ra[F]],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+
+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],y+=9;F=0;for($=sa.length;F<$;F++)pa=Y=X=W=ya=x.value[sa[F]],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],x.array[y+9]=pa[ea[0]],x.array[y+10]=pa[ea[1]],x.array[y+11]=pa[ea[2]],y+=12}else if("faceVertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)ya=x.value[ra[F]],W=ya[0],X=ya[1],Y=ya[2],x.array[y]=
+W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],y+=9;F=0;for($=sa.length;F<$;F++)ya=x.value[sa[F]],W=ya[0],X=ya[1],Y=ya[2],pa=ya[3],x.array[y]=W[ea[0]],x.array[y+1]=W[ea[1]],x.array[y+2]=W[ea[2]],x.array[y+3]=X[ea[0]],x.array[y+4]=X[ea[1]],x.array[y+5]=X[ea[2]],x.array[y+6]=Y[ea[0]],x.array[y+7]=Y[ea[1]],x.array[y+8]=Y[ea[2]],x.array[y+9]=pa[ea[0]],x.array[y+10]=
+pa[ea[1]],x.array[y+11]=pa[ea[2]],y+=12}}else if(4===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)T=Xa[ra[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,y+=12;F=0;for($=sa.length;F<$;F++)T=Xa[sa[F]],W=x.value[T.a],X=x.value[T.b],Y=x.value[T.c],pa=x.value[T.d],
+x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faces"===x.boundTo){F=0;for($=ra.length;F<$;F++)Y=X=W=ya=x.value[ra[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,
+x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,y+=12;F=0;for($=sa.length;F<$;F++)pa=Y=X=W=ya=x.value[sa[F]],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}else if("faceVertices"===x.boundTo){F=0;for($=ra.length;F<$;F++)ya=x.value[ra[F]],W=
+ya[0],X=ya[1],Y=ya[2],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+11]=Y.w,y+=12;F=0;for($=sa.length;F<$;F++)ya=x.value[sa[F]],W=ya[0],X=ya[1],Y=ya[2],pa=ya[3],x.array[y]=W.x,x.array[y+1]=W.y,x.array[y+2]=W.z,x.array[y+3]=W.w,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=X.z,x.array[y+7]=X.w,x.array[y+8]=Y.x,x.array[y+9]=Y.y,x.array[y+10]=Y.z,x.array[y+
+11]=Y.w,x.array[y+12]=pa.x,x.array[y+13]=pa.y,x.array[y+14]=pa.z,x.array[y+15]=pa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,x.buffer);k.bufferData(k.ARRAY_BUFFER,x.array,wa)}}eb&&(delete qa.__inittedArrays,delete qa.__colorArray,delete qa.__normalArray,delete qa.__tangentArray,delete qa.__uvArray,delete qa.__uv2Array,delete qa.__faceArray,delete qa.__vertexArray,delete qa.__lineArray,delete qa.__skinIndexArray,delete qa.__skinWeightArray)}}ba.verticesNeedUpdate=!1;ba.morphTargetsNeedUpdate=!1;ba.elementsNeedUpdate=
+!1;ba.uvsNeedUpdate=!1;ba.normalsNeedUpdate=!1;ba.colorsNeedUpdate=!1;ba.tangentsNeedUpdate=!1;ba.buffersNeedUpdate=!1;ka.attributes&&q(ka)}else if(ua instanceof THREE.Ribbon){ka=e(ua,ba);Ba=ka.attributes&&t(ka);if(ba.verticesNeedUpdate||ba.colorsNeedUpdate||ba.normalsNeedUpdate||Ba){var vb=ba,zc=k.DYNAMIC_DRAW,pc=void 0,qc=void 0,rc=void 0,Ac=void 0,za=void 0,Bc=void 0,Cc=void 0,Dc=void 0,Xc=void 0,Ua=void 0,kc=void 0,Da=void 0,ib=void 0,Yc=vb.vertices,Zc=vb.colors,$c=vb.normals,hd=Yc.length,id=
+Zc.length,jd=$c.length,Ec=vb.__vertexArray,Fc=vb.__colorArray,Gc=vb.__normalArray,kd=vb.colorsNeedUpdate,ld=vb.normalsNeedUpdate,Vc=vb.__webglCustomAttributesList;if(vb.verticesNeedUpdate){for(pc=0;pc<hd;pc++)Ac=Yc[pc],za=3*pc,Ec[za]=Ac.x,Ec[za+1]=Ac.y,Ec[za+2]=Ac.z;k.bindBuffer(k.ARRAY_BUFFER,vb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ec,zc)}if(kd){for(qc=0;qc<id;qc++)Bc=Zc[qc],za=3*qc,Fc[za]=Bc.r,Fc[za+1]=Bc.g,Fc[za+2]=Bc.b;k.bindBuffer(k.ARRAY_BUFFER,vb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,
+Fc,zc)}if(ld){for(rc=0;rc<jd;rc++)Cc=$c[rc],za=3*rc,Gc[za]=Cc.x,Gc[za+1]=Cc.y,Gc[za+2]=Cc.z;k.bindBuffer(k.ARRAY_BUFFER,vb.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,Gc,zc)}if(Vc){Dc=0;for(Xc=Vc.length;Dc<Xc;Dc++)if(Da=Vc[Dc],Da.needsUpdate&&(void 0===Da.boundTo||"vertices"===Da.boundTo)){za=0;kc=Da.value.length;if(1===Da.size)for(Ua=0;Ua<kc;Ua++)Da.array[Ua]=Da.value[Ua];else if(2===Da.size)for(Ua=0;Ua<kc;Ua++)ib=Da.value[Ua],Da.array[za]=ib.x,Da.array[za+1]=ib.y,za+=2;else if(3===Da.size)if("c"===
+Da.type)for(Ua=0;Ua<kc;Ua++)ib=Da.value[Ua],Da.array[za]=ib.r,Da.array[za+1]=ib.g,Da.array[za+2]=ib.b,za+=3;else for(Ua=0;Ua<kc;Ua++)ib=Da.value[Ua],Da.array[za]=ib.x,Da.array[za+1]=ib.y,Da.array[za+2]=ib.z,za+=3;else if(4===Da.size)for(Ua=0;Ua<kc;Ua++)ib=Da.value[Ua],Da.array[za]=ib.x,Da.array[za+1]=ib.y,Da.array[za+2]=ib.z,Da.array[za+3]=ib.w,za+=4;k.bindBuffer(k.ARRAY_BUFFER,Da.buffer);k.bufferData(k.ARRAY_BUFFER,Da.array,zc)}}}ba.verticesNeedUpdate=!1;ba.colorsNeedUpdate=!1;ba.normalsNeedUpdate=
+!1;ka.attributes&&q(ka)}else if(ua instanceof THREE.Line){ka=e(ua,ba);Ba=ka.attributes&&t(ka);if(ba.verticesNeedUpdate||ba.colorsNeedUpdate||ba.lineDistancesNeedUpdate||Ba){var wb=ba,Hc=k.DYNAMIC_DRAW,sc=void 0,tc=void 0,uc=void 0,Ic=void 0,Ia=void 0,Jc=void 0,ad=wb.vertices,bd=wb.colors,cd=wb.lineDistances,md=ad.length,nd=bd.length,od=cd.length,Kc=wb.__vertexArray,Lc=wb.__colorArray,dd=wb.__lineDistanceArray,pd=wb.colorsNeedUpdate,qd=wb.lineDistancesNeedUpdate,Wc=wb.__webglCustomAttributesList,Mc=
+void 0,ed=void 0,Va=void 0,lc=void 0,jb=void 0,Ea=void 0;if(wb.verticesNeedUpdate){for(sc=0;sc<md;sc++)Ic=ad[sc],Ia=3*sc,Kc[Ia]=Ic.x,Kc[Ia+1]=Ic.y,Kc[Ia+2]=Ic.z;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Kc,Hc)}if(pd){for(tc=0;tc<nd;tc++)Jc=bd[tc],Ia=3*tc,Lc[Ia]=Jc.r,Lc[Ia+1]=Jc.g,Lc[Ia+2]=Jc.b;k.bindBuffer(k.ARRAY_BUFFER,wb.__webglColorBuffer);k.bufferData(k.ARRAY_BUFFER,Lc,Hc)}if(qd){for(uc=0;uc<od;uc++)dd[uc]=cd[uc];k.bindBuffer(k.ARRAY_BUFFER,wb.__webglLineDistanceBuffer);
+k.bufferData(k.ARRAY_BUFFER,dd,Hc)}if(Wc){Mc=0;for(ed=Wc.length;Mc<ed;Mc++)if(Ea=Wc[Mc],Ea.needsUpdate&&(void 0===Ea.boundTo||"vertices"===Ea.boundTo)){Ia=0;lc=Ea.value.length;if(1===Ea.size)for(Va=0;Va<lc;Va++)Ea.array[Va]=Ea.value[Va];else if(2===Ea.size)for(Va=0;Va<lc;Va++)jb=Ea.value[Va],Ea.array[Ia]=jb.x,Ea.array[Ia+1]=jb.y,Ia+=2;else if(3===Ea.size)if("c"===Ea.type)for(Va=0;Va<lc;Va++)jb=Ea.value[Va],Ea.array[Ia]=jb.r,Ea.array[Ia+1]=jb.g,Ea.array[Ia+2]=jb.b,Ia+=3;else for(Va=0;Va<lc;Va++)jb=
+Ea.value[Va],Ea.array[Ia]=jb.x,Ea.array[Ia+1]=jb.y,Ea.array[Ia+2]=jb.z,Ia+=3;else if(4===Ea.size)for(Va=0;Va<lc;Va++)jb=Ea.value[Va],Ea.array[Ia]=jb.x,Ea.array[Ia+1]=jb.y,Ea.array[Ia+2]=jb.z,Ea.array[Ia+3]=jb.w,Ia+=4;k.bindBuffer(k.ARRAY_BUFFER,Ea.buffer);k.bufferData(k.ARRAY_BUFFER,Ea.array,Hc)}}}ba.verticesNeedUpdate=!1;ba.colorsNeedUpdate=!1;ba.lineDistancesNeedUpdate=!1;ka.attributes&&q(ka)}else ua instanceof THREE.ParticleSystem&&(ba instanceof THREE.BufferGeometry?((ba.verticesNeedUpdate||ba.colorsNeedUpdate)&&
+j(ba,k.DYNAMIC_DRAW,!ba.dynamic),ba.verticesNeedUpdate=!1,ba.colorsNeedUpdate=!1):(ka=e(ua,ba),Ba=ka.attributes&&t(ka),(ba.verticesNeedUpdate||ba.colorsNeedUpdate||ua.sortParticles||Ba)&&i(ba,k.DYNAMIC_DRAW,ua),ba.verticesNeedUpdate=!1,ba.colorsNeedUpdate=!1,ka.attributes&&q(ka)))}};this.initMaterial=function(a,b,c,d){var e,f,g,h,i,j,l,n,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.LineDashedMaterial?m="dashed":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 p,r,q;e=p=r=q=o=0;for(f=b.length;e<f;e++)g=b[e],g.onlyShadow||(g instanceof THREE.DirectionalLight&&p++,g instanceof THREE.PointLight&&
 r++,g instanceof THREE.SpotLight&&q++,g instanceof THREE.HemisphereLight&&o++);e=p;f=r;g=q;h=o;o=p=0;for(q=b.length;o<q;o++)r=b[o],r.castShadow&&(r instanceof THREE.SpotLight&&p++,r instanceof THREE.DirectionalLight&&!r.shadowCascade&&p++);n=p;fc&&d&&d.useVertexTexture?l=1024:(b=k.getParameter(k.MAX_VERTEX_UNIFORM_VECTORS),b=Math.floor((b-20)/4),void 0!==d&&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)")),l=b);var t;a:{r=a.fragmentShader;q=a.vertexShader;o=a.uniforms;b=a.attributes;p=a.defines;var c={map:!!a.map,envMap:!!a.envMap,lightMap:!!a.lightMap,bumpMap:!!a.bumpMap,normalMap:!!a.normalMap,specularMap:!!a.specularMap,vertexColors:a.vertexColors,fog:c,useFog:a.fog,fogExp:c instanceof THREE.FogExp2,sizeAttenuation:a.sizeAttenuation,skinning:a.skinning,maxBones:l,useVertexTexture:fc&&d&&d.useVertexTexture,boneTextureWidth:d&&d.boneTextureWidth,
@@ -491,14 +491,14 @@ c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp?"#define FOG_EXP2":"",c.
 w);for(w=0;w<c.maxMorphNormals;w++)s.push("morphNormal"+w);for(t in b)s.push(t);t=s;w=0;for(b=t.length;w<b;w++)s=t[w],v.attributes[s]=k.getAttribLocation(v,s);v.id=R++;ja.push({program:v,code:m,usedTimes:1});K.info.memory.programs=ja.length;t=v}a.program=t;t=a.program.attributes;0<=t.position&&k.enableVertexAttribArray(t.position);0<=t.color&&k.enableVertexAttribArray(t.color);0<=t.normal&&k.enableVertexAttribArray(t.normal);0<=t.tangent&&k.enableVertexAttribArray(t.tangent);0<=t.lineDistance&&k.enableVertexAttribArray(t.lineDistance);
 a.skinning&&(0<=t.skinIndex&&0<=t.skinWeight)&&(k.enableVertexAttribArray(t.skinIndex),k.enableVertexAttribArray(t.skinWeight));if(a.attributes)for(j in a.attributes)void 0!==t[j]&&0<=t[j]&&k.enableVertexAttribArray(t[j]);if(a.morphTargets){a.numSupportedMorphTargets=0;v="morphTarget";for(j=0;j<this.maxMorphTargets;j++)w=v+j,0<=t[w]&&(k.enableVertexAttribArray(t[w]),a.numSupportedMorphTargets++)}if(a.morphNormals){a.numSupportedMorphNormals=0;v="morphNormal";for(j=0;j<this.maxMorphNormals;j++)w=v+
 j,0<=t[w]&&(k.enableVertexAttribArray(t[w]),a.numSupportedMorphNormals++)}a.uniformsList=[];for(i in a.uniforms)a.uniformsList.push([a.uniforms[i],i])};this.setFaceCulling=function(a,b){a?(!b||"ccw"===b?k.frontFace(k.CCW):k.frontFace(k.CW),"back"===a?k.cullFace(k.BACK):"front"===a?k.cullFace(k.FRONT):k.cullFace(k.FRONT_AND_BACK),k.enable(k.CULL_FACE)):k.disable(k.CULL_FACE)};this.setMaterialFaces=function(a){var b=a.side===THREE.DoubleSide,a=a.side===THREE.BackSide;ua!==b&&(b?k.disable(k.CULL_FACE):
-k.enable(k.CULL_FACE),ua=b);Ca!==a&&(a?k.frontFace(k.CW):k.frontFace(k.CCW),Ca=a)};this.setDepthTest=function(a){Ua!==a&&(a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST),Ua=a)};this.setDepthWrite=function(a){gb!==a&&(k.depthMask(a),gb=a)};this.setBlending=function(a,b,c,d){a!==Ka&&(a===THREE.NoBlending?k.disable(k.BLEND):a===THREE.AdditiveBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.SRC_ALPHA,k.ONE)):a===THREE.SubtractiveBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),
-k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.ZERO,k.SRC_COLOR)):a===THREE.CustomBlending?k.enable(k.BLEND):(k.enable(k.BLEND),k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD),k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)),Ka=a);if(a===THREE.CustomBlending){if(b!==va&&(k.blendEquation(H(b)),va=b),c!==db||d!==xb)k.blendFunc(H(c),H(d)),db=c,xb=d}else xb=db=va=null};this.setTexture=
+k.enable(k.CULL_FACE),ua=b);Ba!==a&&(a?k.frontFace(k.CW):k.frontFace(k.CCW),Ba=a)};this.setDepthTest=function(a){kb!==a&&(a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST),kb=a)};this.setDepthWrite=function(a){gb!==a&&(k.depthMask(a),gb=a)};this.setBlending=function(a,b,c,d){a!==Ka&&(a===THREE.NoBlending?k.disable(k.BLEND):a===THREE.AdditiveBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.SRC_ALPHA,k.ONE)):a===THREE.SubtractiveBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),
+k.blendFunc(k.ZERO,k.ONE_MINUS_SRC_COLOR)):a===THREE.MultiplyBlending?(k.enable(k.BLEND),k.blendEquation(k.FUNC_ADD),k.blendFunc(k.ZERO,k.SRC_COLOR)):a===THREE.CustomBlending?k.enable(k.BLEND):(k.enable(k.BLEND),k.blendEquationSeparate(k.FUNC_ADD,k.FUNC_ADD),k.blendFuncSeparate(k.SRC_ALPHA,k.ONE_MINUS_SRC_ALPHA,k.ONE,k.ONE_MINUS_SRC_ALPHA)),Ka=a);if(a===THREE.CustomBlending){if(b!==va&&(k.blendEquation(H(b)),va=b),c!==eb||d!==Ya)k.blendFunc(H(c),H(d)),eb=c,Ya=d}else Ya=eb=va=null};this.setTexture=
 function(a,b){if(a.needsUpdate){a.__webglInit||(a.__webglInit=!0,a.__webglTexture=k.createTexture(),K.info.memory.textures++);k.activeTexture(k.TEXTURE0+b);k.bindTexture(k.TEXTURE_2D,a.__webglTexture);k.pixelStorei(k.UNPACK_FLIP_Y_WEBGL,a.flipY);k.pixelStorei(k.UNPACK_PREMULTIPLY_ALPHA_WEBGL,a.premultiplyAlpha);var c=a.image,d=0===(c.width&c.width-1)&&0===(c.height&c.height-1),e=H(a.format),f=H(a.type);P(k.TEXTURE_2D,a,d);if(a instanceof THREE.CompressedTexture)for(var f=a.mipmaps,g=0,h=f.length;g<
 h;g++)c=f[g],k.compressedTexImage2D(k.TEXTURE_2D,g,e,c.width,c.height,0,c.data);else a instanceof THREE.DataTexture?k.texImage2D(k.TEXTURE_2D,0,e,c.width,c.height,0,e,f,c.data):k.texImage2D(k.TEXTURE_2D,0,e,e,f,a.image);a.generateMipmaps&&d&&k.generateMipmap(k.TEXTURE_2D);a.needsUpdate=!1;if(a.onUpdate)a.onUpdate()}else k.activeTexture(k.TEXTURE0+b),k.bindTexture(k.TEXTURE_2D,a.__webglTexture)};this.setRenderTarget=function(a){var b=a instanceof THREE.WebGLRenderTargetCube;if(a&&!a.__webglFramebuffer){void 0===
 a.depthBuffer&&(a.depthBuffer=!0);void 0===a.stencilBuffer&&(a.stencilBuffer=!0);a.__webglTexture=k.createTexture();var c=0===(a.width&a.width-1)&&0===(a.height&a.height-1),d=H(a.format),e=H(a.type);if(b){a.__webglFramebuffer=[];a.__webglRenderbuffer=[];k.bindTexture(k.TEXTURE_CUBE_MAP,a.__webglTexture);P(k.TEXTURE_CUBE_MAP,a,c);for(var f=0;6>f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,
 a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);B(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),P(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,
-k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,d,a.__webglTexture,0),B(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=mb,a=Na,d=xa,e=La);b!==fa&&(k.bindFramebuffer(k.FRAMEBUFFER,
-b),k.viewport(d,e,c,a),fa=b);Za=c;eb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};
+k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer),k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,d,a.__webglTexture,0),B(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER,null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=lb,a=Na,d=wa,e=La);b!==fa&&(k.bindFramebuffer(k.FRAMEBUFFER,
+b),k.viewport(d,e,c,a),fa=b);Za=c;db=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};
 THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:
 THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0};
 THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.anisotropy=this.anisotropy;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;return a};

+ 1 - 1
examples/canvas_geometry_panorama.html

@@ -77,7 +77,7 @@
 
 				];
 
-				mesh = new THREE.Mesh( new THREE.CubeGeometry( 300, 300, 300, 7, 7, 7, materials ), new THREE.MeshFaceMaterial() );
+				mesh = new THREE.Mesh( new THREE.CubeGeometry( 300, 300, 300, 7, 7, 7 ), new THREE.MeshFaceMaterial( materials ) );
 				mesh.scale.x = - 1;
 				scene.add( mesh );
 

+ 1 - 1
examples/canvas_geometry_panorama_fisheye.html

@@ -77,7 +77,7 @@
 
 				];
 
-				mesh = new THREE.Mesh( new THREE.CubeGeometry( 300, 300, 300, 7, 7, 7, materials ), new THREE.MeshFaceMaterial() );
+				mesh = new THREE.Mesh( new THREE.CubeGeometry( 300, 300, 300, 7, 7, 7 ), new THREE.MeshFaceMaterial( materials ) );
 				mesh.scale.x = - 1;
 				scene.add( mesh );
 

+ 5 - 5
examples/canvas_materials.html

@@ -65,7 +65,7 @@
 
 				var geometry = new THREE.SphereGeometry( 100, 14, 7, false );
 
-				geometry.materials = [
+				var materials = [
 
 					new THREE.MeshBasicMaterial( { color: 0x00ffff, wireframe: true, side: THREE.DoubleSide } ),
 					new THREE.MeshBasicMaterial( { color: 0xff0000, blending: THREE.AdditiveBlending, side: THREE.DoubleSide } ),
@@ -81,17 +81,17 @@
 				for ( var i = 0, l = geometry.faces.length; i < l; i ++ ) {
 
 					var face = geometry.faces[ i ];
-					if ( Math.random() > 0.5 ) face.materialIndex = Math.floor( Math.random() * geometry.materials.length );
+					if ( Math.random() > 0.5 ) face.materialIndex = Math.floor( Math.random() * materials.length );
 
 				}
 
-				geometry.materials.push( new THREE.MeshFaceMaterial() );
+				materials.push( new THREE.MeshFaceMaterial( materials ) );
 
 				objects = [];
 
-				for ( var i = 0, l = geometry.materials.length; i < l; i ++ ) {
+				for ( var i = 0, l = materials.length; i < l; i ++ ) {
 
-					var sphere = new THREE.Mesh( geometry, geometry.materials[ i ] );
+					var sphere = new THREE.Mesh( geometry, materials[ i ] );
 
 					sphere.position.x = ( i % 5 ) * 200 - 400;
 					sphere.position.z = Math.floor( i / 5 ) * 200 - 200;

+ 5 - 4
examples/misc_ubiquity_test.html

@@ -96,6 +96,7 @@
 				// POLYFIELD
 
 				var geometry = new THREE.Geometry();
+				var materials = [];
 
 				for ( var i = 0; i < 100; i ++ ) {
 
@@ -109,12 +110,12 @@
 					v1.addSelf( v );
 					v2.addSelf( v );
 
-					var face = new THREE.Face3( geometry.vertices.push( v0 ) - 1, geometry.vertices.push( v1 ) - 1, geometry.vertices.push( v2 ) - 1, null, null, geometry.materials.length );
-
-					geometry.materials.push( new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, side: THREE.DoubleSide } ) );
+					var face = new THREE.Face3( geometry.vertices.push( v0 ) - 1, geometry.vertices.push( v1 ) - 1, geometry.vertices.push( v2 ) - 1, null, null, i );
 
 					geometry.faces.push( face );
 
+					materials.push( new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff, side: THREE.DoubleSide } ) );
+
 				}
 
 				geometry.computeFaceNormals();
@@ -124,7 +125,7 @@
 				group.scale.x = group.scale.y = group.scale.z = 2;
 				scene.add( group );
 
-				mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial() );
+				mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
 				group.add( mesh );
 
 				// LIGHTS

+ 2 - 11
examples/webgl_materials.html

@@ -96,22 +96,13 @@
 				for ( var i = 0, l = geometry_pieces.faces.length; i < l; i ++ ) {
 
 					var face = geometry_pieces.faces[ i ];
-
-					if ( Math.random() > 0.7 )  {
-
-						face.materialIndex = Math.floor( Math.random() * materials.length );
-
-					} else {
-
-						face.materialIndex = 0;
-
-					}
+					face.materialIndex = Math.floor( Math.random() * materials.length );
 
 				}
 
 				geometry_pieces.materials = materials;
 
-				materials.push( new THREE.MeshFaceMaterial() );
+				materials.push( new THREE.MeshFaceMaterial( materials ) );
 
 				objects = [];
 

+ 1 - 16
examples/webgl_sandbox.html

@@ -97,11 +97,7 @@
 					new THREE.MeshLambertMaterial( { color: 0xdddddd, shading: THREE.FlatShading } ),
 					new THREE.MeshLambertMaterial( { color: 0xdddddd, shading: THREE.SmoothShading } ),
 					new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, specular: 0x009900, shininess: 30, shading: THREE.FlatShading } ),
-					new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, specular: 0x009900, shininess: 30, shading: THREE.SmoothShading } ),
-/*
-					new THREE.MeshBasicMaterial( { map: texture2, envMap: THREE.ImageUtils.loadTexture( 'textures/envmap.png', new THREE.SphericalReflectionMapping() ) } ),
-					new THREE.MeshLambertMaterial( { map: texture2, envMap: THREE.ImageUtils.loadTexture( 'textures/envmap.png', new THREE.SphericalReflectionMapping() ) } ),
-*/
+					new THREE.MeshPhongMaterial( { ambient: 0x030303, color: 0xdddddd, specular: 0x009900, shininess: 30, shading: THREE.SmoothShading } )
 
 				];
 
@@ -114,17 +110,6 @@
 
 				}
 
-				/*
-				for ( var i = 0, l = geometry.faces.length; i < l; i ++ ) {
-
-					var face = geometry.faces[ i ];
-					face.materialIndex = Math.floor( Math.random() * materials.length );
-
-				}
-				*/
-
-				//materials.push( new THREE.MeshFaceMaterial() );
-
 				for ( var i = 0; i < 5000; i ++ ) {
 
 					// random order

+ 3 - 5
src/core/Projector.js

@@ -171,9 +171,8 @@ THREE.Projector = function() {
 	this.projectScene = function ( scene, camera, sortObjects, sortElements ) {
 
 		var near = camera.near, far = camera.far, visible = false,
-		o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object,
-		modelMatrix,
-		geometry, geometryMaterials, vertices, vertex, vertexPositionScreen,
+		o, ol, v, vl, f, fl, n, nl, c, cl, u, ul, object, modelMatrix,
+		geometry, vertices, vertex, vertexPositionScreen,
 		faces, face, faceVertexNormals, normal, faceVertexUvs, uvs,
 		v1, v2, v3, v4, isFaceMaterial, material, side;
 
@@ -216,7 +215,6 @@ THREE.Projector = function() {
 				_normalMatrix.transpose();
 
 				isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
-				geometryMaterials = ( isFaceMaterial && object.material.materials.length > 0 ) ? object.material.materials : object.geometry.materials;
 
 				side = object.material.side;
 
@@ -241,7 +239,7 @@ THREE.Projector = function() {
 
 					face = faces[ f ];
 
-					material = isFaceMaterial === true ? geometryMaterials[ face.materialIndex ] : object.material;
+					material = isFaceMaterial === true ? object.material.materials[ face.materialIndex ] : object.material;
 
 					if ( material === undefined ) continue;