Sfoglia il codice sorgente

Fixed implications of new MeshFaceMaterial.materials at multiple places (Ray, Projector, ShadowMapPlugin, DepthPassPlugin).

Thanks to @WestLangley for vigilance (see #2623).
alteredq 12 anni fa
parent
commit
d5e032b979

+ 42 - 7
build/three.js

@@ -2965,8 +2965,9 @@ THREE.Frustum.__v1 = new THREE.Vector3();
 			var geometry = object.geometry;
 			var geometry = object.geometry;
 			var vertices = geometry.vertices;
 			var vertices = geometry.vertices;
 
 
-			var geometryMaterials = object.geometry.materials;
 			var isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
 			var isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
+			var geometryMaterials = ( isFaceMaterial && object.material.materials.length > 0 ) ? object.material.materials : object.geometry.materials;
+
 			var side = object.material.side;
 			var side = object.material.side;
 
 
 			var a, b, c, d;
 			var a, b, c, d;
@@ -3983,7 +3984,7 @@ THREE.Projector = function() {
 
 
 		_renderData = projectGraph( scene, sortObjects );
 		_renderData = projectGraph( scene, sortObjects );
 
 
-		for ( o = 0, ol = _renderData.objects.length; o < ol; o++ ) {
+		for ( o = 0, ol = _renderData.objects.length; o < ol; o ++ ) {
 
 
 			object = _renderData.objects[ o ].object;
 			object = _renderData.objects[ o ].object;
 
 
@@ -3994,7 +3995,7 @@ THREE.Projector = function() {
 			if ( object instanceof THREE.Mesh ) {
 			if ( object instanceof THREE.Mesh ) {
 
 
 				geometry = object.geometry;
 				geometry = object.geometry;
-				geometryMaterials = object.geometry.materials;
+
 				vertices = geometry.vertices;
 				vertices = geometry.vertices;
 				faces = geometry.faces;
 				faces = geometry.faces;
 				faceVertexUvs = geometry.faceVertexUvs;
 				faceVertexUvs = geometry.faceVertexUvs;
@@ -4003,6 +4004,8 @@ THREE.Projector = function() {
 				_normalMatrix.transpose();
 				_normalMatrix.transpose();
 
 
 				isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
 				isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
+				geometryMaterials = ( isFaceMaterial && object.material.materials.length > 0 ) ? object.material.materials : object.geometry.materials;
+
 				side = object.material.side;
 				side = object.material.side;
 
 
 				for ( v = 0, vl = vertices.length; v < vl; v ++ ) {
 				for ( v = 0, vl = vertices.length; v < vl; v ++ ) {
@@ -35174,9 +35177,25 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 	function getObjectMaterial( object ) {
 	function getObjectMaterial( object ) {
 
 
-		return object.material instanceof THREE.MeshFaceMaterial ? object.geometry.materials[ 0 ] : object.material;
+		if ( object.material instanceof THREE.MeshFaceMaterial ) {
 
 
-	}
+			if ( object.material.materials.length > 0 ) {
+
+				return object.material.materials[ 0 ];
+
+			} else {
+
+				return object.geometry.materials[ 0 ];
+
+			}
+
+		} else {
+
+			return object.material;
+
+		}
+
+	};
 
 
 };
 };
 
 
@@ -35690,9 +35709,25 @@ THREE.DepthPassPlugin = function ( ) {
 
 
 	function getObjectMaterial( object ) {
 	function getObjectMaterial( object ) {
 
 
-		return object.material instanceof THREE.MeshFaceMaterial ? object.geometry.materials[ 0 ] : object.material;
+		if ( object.material instanceof THREE.MeshFaceMaterial ) {
 
 
-	}
+			if ( object.material.materials.length > 0 ) {
+
+				return object.material.materials[ 0 ];
+
+			} else {
+
+				return object.geometry.materials[ 0 ];
+
+			}
+
+		} else {
+
+			return object.material;
+
+		}
+
+	};
 
 
 };
 };
 
 

+ 108 - 108
build/three.min.js

@@ -61,9 +61,9 @@ THREE.Frustum.prototype.setFromMatrix=function(a){var b=this.planes,c=a.elements
 THREE.Frustum.prototype.contains=function(a){for(var b=0,c=this.planes,b=a.matrixWorld,d=b.elements,a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),e=0;6>e;e++)if(b=c[e].x*d[12]+c[e].y*d[13]+c[e].z*d[14]+c[e].w,b<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3;
 THREE.Frustum.prototype.contains=function(a){for(var b=0,c=this.planes,b=a.matrixWorld,d=b.elements,a=-a.geometry.boundingSphere.radius*b.getMaxScaleOnAxis(),e=0;6>e;e++)if(b=c[e].x*d[12]+c[e].y*d[13]+c[e].z*d[14]+c[e].w,b<=a)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3;
 (function(a){a.Ray=function(b,c,d,e){this.origin=b||new a.Vector3;this.direction=c||new a.Vector3;this.near=d||0;this.far=e||Infinity};var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,e=new a.Vector3;new a.Vector3;var f=new a.Vector3,g=new a.Matrix4,h=function(a,b){return a.distance-b.distance},i=new a.Vector3,j=new a.Vector3,l=new a.Vector3,n=function(a,b,c){i.sub(c,a);var d=i.dot(b),a=j.add(a,l.copy(b).multiplyScalar(d));return c.distanceTo(a)},m=function(a,b,c,d){i.sub(d,b);j.sub(c,b);l.sub(a,
 (function(a){a.Ray=function(b,c,d,e){this.origin=b||new a.Vector3;this.direction=c||new a.Vector3;this.near=d||0;this.far=e||Infinity};var b=new a.Vector3,c=new a.Vector3,d=new a.Vector3,e=new a.Vector3;new a.Vector3;var f=new a.Vector3,g=new a.Matrix4,h=function(a,b){return a.distance-b.distance},i=new a.Vector3,j=new a.Vector3,l=new a.Vector3,n=function(a,b,c){i.sub(c,a);var d=i.dot(b),a=j.add(a,l.copy(b).multiplyScalar(d));return c.distanceTo(a)},m=function(a,b,c,d){i.sub(d,b);j.sub(c,b);l.sub(a,
 b);var a=i.dot(i),b=i.dot(j),c=i.dot(l),e=j.dot(j),d=j.dot(l),f=1/(a*e-b*b),e=(e*c-b*d)*f,a=(a*d-b*c)*f;return 0<=e&&0<=a&&1>e+a},p=function(h,i,j){if(h instanceof a.Particle){var l=n(i.origin,i.direction,h.matrixWorld.getPosition());if(l>h.scale.x)return j;j.push({distance:l,point:h.position,face:null,object:h})}else if(h instanceof a.Mesh){var o=h.geometry.boundingSphere.radius*h.matrixWorld.getMaxScaleOnAxis(),l=n(i.origin,i.direction,h.matrixWorld.getPosition());if(l>o)return j;var o=h.geometry,
 b);var a=i.dot(i),b=i.dot(j),c=i.dot(l),e=j.dot(j),d=j.dot(l),f=1/(a*e-b*b),e=(e*c-b*d)*f,a=(a*d-b*c)*f;return 0<=e&&0<=a&&1>e+a},p=function(h,i,j){if(h instanceof a.Particle){var l=n(i.origin,i.direction,h.matrixWorld.getPosition());if(l>h.scale.x)return j;j.push({distance:l,point:h.position,face:null,object:h})}else if(h instanceof a.Mesh){var o=h.geometry.boundingSphere.radius*h.matrixWorld.getMaxScaleOnAxis(),l=n(i.origin,i.direction,h.matrixWorld.getPosition());if(l>o)return j;var o=h.geometry,
-p=o.vertices,D=h.geometry.materials,z=h.material instanceof a.MeshFaceMaterial,l=h.material.side,w,v,C,E=i.precision;h.matrixRotationWorld.extractRotation(h.matrixWorld);b.copy(i.origin);g.getInverse(h.matrixWorld);c.copy(b);g.multiplyVector3(c);d.copy(i.direction);g.rotateAxis(d).normalize();for(var G=0,L=o.faces.length;G<L;G++){var B=o.faces[G],l=!0===z?D[B.materialIndex]:h.material;if(void 0!==l&&(l=l.side,e.sub(B.centroid,c),v=B.normal,w=d.dot(v),!(Math.abs(w)<E)&&(v=v.dot(e)/w,!(0>v)&&(l===a.DoubleSide||
-(l===a.FrontSide?0>w:0<w)))))if(f.add(c,d.multiplyScalar(v)),B instanceof a.Face3)l=p[B.a],w=p[B.b],v=p[B.c],m(f,l,w,v)&&(w=h.matrixWorld.multiplyVector3(f.clone()),l=b.distanceTo(w),l<i.near||l>i.far||j.push({distance:l,point:w,face:B,faceIndex:G,object:h}));else if(B instanceof a.Face4&&(l=p[B.a],w=p[B.b],v=p[B.c],C=p[B.d],m(f,l,w,C)||m(f,w,v,C)))w=h.matrixWorld.multiplyVector3(f.clone()),l=b.distanceTo(w),l<i.near||l>i.far||j.push({distance:l,point:w,face:B,faceIndex:G,object:h})}}},o=function(a,
-b,c){for(var a=a.getDescendants(),d=0,e=a.length;d<e;d++)p(a[d],b,c)};a.Ray.prototype.precision=1E-4;a.Ray.prototype.set=function(a,b){this.origin=a;this.direction=b};a.Ray.prototype.intersectObject=function(a,b){var c=[];!0===b&&o(a,this,c);p(a,this,c);c.sort(h);return c};a.Ray.prototype.intersectObjects=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)p(a[d],this,c),!0===b&&o(a[d],this,c);c.sort(h);return c}})(THREE);
+p=o.vertices,D=h.material instanceof a.MeshFaceMaterial,z=D&&0<h.material.materials.length?h.material.materials:h.geometry.materials,l=h.material.side,w,v,C,E=i.precision;h.matrixRotationWorld.extractRotation(h.matrixWorld);b.copy(i.origin);g.getInverse(h.matrixWorld);c.copy(b);g.multiplyVector3(c);d.copy(i.direction);g.rotateAxis(d).normalize();for(var G=0,L=o.faces.length;G<L;G++){var B=o.faces[G],l=!0===D?z[B.materialIndex]:h.material;if(void 0!==l&&(l=l.side,e.sub(B.centroid,c),v=B.normal,w=d.dot(v),
+!(Math.abs(w)<E)&&(v=v.dot(e)/w,!(0>v)&&(l===a.DoubleSide||(l===a.FrontSide?0>w:0<w)))))if(f.add(c,d.multiplyScalar(v)),B instanceof a.Face3)l=p[B.a],w=p[B.b],v=p[B.c],m(f,l,w,v)&&(w=h.matrixWorld.multiplyVector3(f.clone()),l=b.distanceTo(w),l<i.near||l>i.far||j.push({distance:l,point:w,face:B,faceIndex:G,object:h}));else if(B instanceof a.Face4&&(l=p[B.a],w=p[B.b],v=p[B.c],C=p[B.d],m(f,l,w,C)||m(f,w,v,C)))w=h.matrixWorld.multiplyVector3(f.clone()),l=b.distanceTo(w),l<i.near||l>i.far||j.push({distance:l,
+point:w,face:B,faceIndex:G,object:h})}}},o=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;d<e;d++)p(a[d],b,c)};a.Ray.prototype.precision=1E-4;a.Ray.prototype.set=function(a,b){this.origin=a;this.direction=b};a.Ray.prototype.intersectObject=function(a,b){var c=[];!0===b&&o(a,this,c);p(a,this,c);c.sort(h);return c};a.Ray.prototype.intersectObjects=function(a,b){for(var c=[],d=0,e=a.length;d<e;d++)p(a[d],this,c),!0===b&&o(a[d],this,c);c.sort(h);return c}})(THREE);
 THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b=0,c=0,d=0,e=0,f=0,g=0,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,l,n){h=!1;b=f;c=g;d=l;e=n;a()};this.addPoint=function(f,g){!0===h?(h=!1,b=f,c=g,d=f,e=g):(b=b<f?b:f,c=c<g?c:g,d=d>f?d:f,e=e>
 THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b=0,c=0,d=0,e=0,f=0,g=0,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,l,n){h=!1;b=f;c=g;d=l;e=n;a()};this.addPoint=function(f,g){!0===h?(h=!1,b=f,c=g,d=f,e=g):(b=b<f?b:f,c=c<g?c:g,d=d>f?d:f,e=e>
 g?e:g);a()};this.add3Points=function(f,g,l,n,m,p){!0===h?(h=!1,b=f<l?f<m?f:m:l<m?l:m,c=g<n?g<p?g:p:n<p?n:p,d=f>l?f>m?f:m:l>m?l:m,e=g>n?g>p?g:p:n>p?n:p):(b=f<l?f<m?f<b?f:b:m<b?m:b:l<m?l<b?l:b:m<b?m:b,c=g<n?g<p?g<c?g:c:p<c?p:c:n<p?n<c?n:c:p<c?p:c,d=f>l?f>m?f>d?f:d:m>d?m:d:l>m?l>d?l:d:m>d?m:d,e=g>n?g>p?g>e?g:e:p>e?p:e:n>p?n>e?n:e:p>e?p:e);a()};this.addRectangle=function(f){!0===h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=b<f.getLeft()?b:f.getLeft(),c=c<f.getTop()?c:f.getTop(),
 g?e:g);a()};this.add3Points=function(f,g,l,n,m,p){!0===h?(h=!1,b=f<l?f<m?f:m:l<m?l:m,c=g<n?g<p?g:p:n<p?n:p,d=f>l?f>m?f:m:l>m?l:m,e=g>n?g>p?g:p:n>p?n:p):(b=f<l?f<m?f<b?f:b:m<b?m:b:l<m?l<b?l:b:m<b?m:b,c=g<n?g<p?g<c?g:c:p<c?p:c:n<p?n<c?n:c:p<c?p:c,d=f>l?f>m?f>d?f:d:m>d?m:d:l>m?l>d?l:d:m>d?m:d,e=g>n?g>p?g>e?g:e:p>e?p:e:n>p?n>e?n:e:p>e?p:e);a()};this.addRectangle=function(f){!0===h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=b<f.getLeft()?b:f.getLeft(),c=c<f.getTop()?c:f.getTop(),
 d=d>f.getRight()?d:f.getRight(),e=e>f.getBottom()?e:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;e+=f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=d<f.getRight()?d:f.getRight();e=e<f.getBottom()?e:f.getBottom();a()};this.intersects=function(a){return d<a.getLeft()||b>a.getRight()||e<a.getTop()||c>a.getBottom()?!1:!0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}};
 d=d>f.getRight()?d:f.getRight(),e=e>f.getBottom()?e:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;e+=f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=d<f.getRight()?d:f.getRight();e=e<f.getBottom()?e:f.getBottom();a()};this.intersects=function(a){return d<a.getLeft()||b>a.getRight()||e<a.getTop()||c>a.getBottom()?!1:!0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}};
@@ -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=[];
 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;l.push(a);n++;j++;return a}return l[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<
 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;l.push(a);n++;j++;return a}return l[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,l=[],n=0,m,p,o=[],q=0,t,r=[],A=0,u,s,D=[],z=0,w,v,C=[],E=0,G={objects:[],sprites:[],lights:[],elements:[]},L=new THREE.Vector3,B=new THREE.Vector4,J=new THREE.Matrix4,H=new THREE.Matrix4,I=new THREE.Matrix3,O=new THREE.Frustum,N=new THREE.Vector4,M=new THREE.Vector4;this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);J.multiply(b.projectionMatrix,b.matrixWorldInverse);J.multiplyVector3(a);return a};
 c)return!1;a.lerpSelf(b,c);b.lerpSelf(a,1-d);return!0}var e,f,g=[],h=0,i,j,l=[],n=0,m,p,o=[],q=0,t,r=[],A=0,u,s,D=[],z=0,w,v,C=[],E=0,G={objects:[],sprites:[],lights:[],elements:[]},L=new THREE.Vector3,B=new THREE.Vector4,J=new THREE.Matrix4,H=new THREE.Matrix4,I=new THREE.Matrix3,O=new THREE.Frustum,N=new THREE.Vector4,M=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,S){var $=h.near,K=h.far,ja=!1,Q,ha,da,Y,aa,ba,ia,ya,Na,za,Oa,Aa,pa,xb,Va;v=s=t=p=0;G.elements.length=0;g.updateMatrixWorld();
+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,S){var $=h.near,K=h.far,ja=!1,Q,ha,da,Y,aa,ba,ia,wa,ua,Ca,Ka,va,cb,wb,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);O.setFromMatrix(J);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var fb=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===O.contains(f))e=a(),e.object=f,null!==f.renderDepth?
 void 0===h.parent&&h.updateMatrixWorld();h.matrixWorldInverse.getInverse(h.matrixWorld);J.multiply(h.projectionMatrix,h.matrixWorldInverse);O.setFromMatrix(J);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var fb=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===O.contains(f))e=a(),e.object=f,null!==f.renderDepth?
 e.z=f.renderDepth:(L.copy(f.matrixWorld.getPosition()),J.multiplyVector3(L),e.z=L.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:(L.copy(f.matrixWorld.getPosition()),J.multiplyVector3(L),e.z=L.z),G.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(L.copy(f.matrixWorld.getPosition()),J.multiplyVector3(L),e.z=L.z),G.objects.push(e));fb(f)}}};fb(g);!0===n&&G.objects.sort(c);g=0;for(n=G.objects.length;g<
 e.z=f.renderDepth:(L.copy(f.matrixWorld.getPosition()),J.multiplyVector3(L),e.z=L.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:(L.copy(f.matrixWorld.getPosition()),J.multiplyVector3(L),e.z=L.z),G.sprites.push(e)):(e=a(),e.object=f,null!==f.renderDepth?e.z=f.renderDepth:(L.copy(f.matrixWorld.getPosition()),J.multiplyVector3(L),e.z=L.z),G.objects.push(e));fb(f)}}};fb(g);!0===n&&G.objects.sort(c);g=0;for(n=G.objects.length;g<
-n;g++)if(ya=G.objects[g].object,Na=ya.matrixWorld,j=0,ya instanceof THREE.Mesh){za=ya.geometry;Oa=ya.geometry.materials;da=za.vertices;Aa=za.faces;za=za.faceVertexUvs;I.getInverse(Na);I.transpose();xb=ya.material instanceof THREE.MeshFaceMaterial;Q=0;for(ha=da.length;Q<ha;Q++)i=b(),i.positionWorld.copy(da[Q]),Na.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>$&&i.positionScreen.z<K;da=0;for(Q=Aa.length;da<Q;da++)if(ha=Aa[da],Va=!0===xb?Oa[ha.materialIndex]:ya.material,void 0!==Va){ba=Va.side;if(ha instanceof THREE.Face3)if(Y=l[ha.a],aa=l[ha.b],ia=l[ha.c],!0===Y.visible&&!0===aa.visible&&!0===ia.visible)if(ja=0>(ia.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(ia.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x),ba===THREE.DoubleSide||ja===(ba===THREE.FrontSide))p===q?(pa=
-new THREE.RenderableFace3,o.push(pa),q++,p++,m=pa):m=o[p++],m.v1.copy(Y),m.v2.copy(aa),m.v3.copy(ia);else continue;else continue;else if(ha instanceof THREE.Face4)if(Y=l[ha.a],aa=l[ha.b],ia=l[ha.c],pa=l[ha.d],!0===Y.visible&&!0===aa.visible&&!0===ia.visible&&!0===pa.visible)if(ja=0>(pa.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(pa.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x)||0>(aa.positionScreen.x-ia.positionScreen.x)*(pa.positionScreen.y-
-ia.positionScreen.y)-(aa.positionScreen.y-ia.positionScreen.y)*(pa.positionScreen.x-ia.positionScreen.x),ba===THREE.DoubleSide||ja===(ba===THREE.FrontSide)){if(t===A){var kb=new THREE.RenderableFace4;r.push(kb);A++;t++;m=kb}else m=r[t++];m.v1.copy(Y);m.v2.copy(aa);m.v3.copy(ia);m.v4.copy(pa)}else continue;else continue;m.normalWorld.copy(ha.normal);!1===ja&&(ba===THREE.BackSide||ba===THREE.DoubleSide)&&m.normalWorld.negate();I.multiplyVector3(m.normalWorld).normalize();m.centroidWorld.copy(ha.centroid);
-Na.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);J.multiplyVector3(m.centroidScreen);ia=ha.vertexNormals;Y=0;for(aa=ia.length;Y<aa;Y++)pa=m.vertexNormalsWorld[Y],pa.copy(ia[Y]),!1===ja&&(ba===THREE.BackSide||ba===THREE.DoubleSide)&&pa.negate(),I.multiplyVector3(pa).normalize();m.vertexNormalsLength=ia.length;Y=0;for(aa=za.length;Y<aa;Y++)if(pa=za[Y][da],void 0!==pa){ba=0;for(ia=pa.length;ba<ia;ba++)m.uvs[Y][ba]=pa[ba]}m.color=ha.color;m.material=Va;m.z=m.centroidScreen.z;
-G.elements.push(m)}}else if(ya instanceof THREE.Line){H.multiply(J,Na);da=ya.geometry.vertices;Y=b();Y.positionScreen.copy(da[0]);H.multiplyVector4(Y.positionScreen);Na=ya.type===THREE.LinePieces?2:1;Q=1;for(ha=da.length;Q<ha;Q++)Y=b(),Y.positionScreen.copy(da[Q]),H.multiplyVector4(Y.positionScreen),0<(Q+1)%Na||(aa=l[j-2],N.copy(Y.positionScreen),M.copy(aa.positionScreen),!0===d(N,M)&&(N.multiplyScalar(1/N.w),M.multiplyScalar(1/M.w),s===z?(Oa=new THREE.RenderableLine,D.push(Oa),z++,s++,u=Oa):u=D[s++],
-u.v1.positionScreen.copy(N),u.v2.positionScreen.copy(M),u.z=Math.max(N.z,M.z),u.material=ya.material,G.elements.push(u)))}g=0;for(n=G.sprites.length;g<n;g++)ya=G.sprites[g].object,Na=ya.matrixWorld,ya instanceof THREE.Particle&&(B.set(Na.elements[12],Na.elements[13],Na.elements[14],1),J.multiplyVector4(B),B.z/=B.w,0<B.z&&1>B.z&&(v===E?($=new THREE.RenderableParticle,C.push($),E++,v++,w=$):w=C[v++],w.object=ya,w.x=B.x/B.w,w.y=B.y/B.w,w.z=B.z,w.rotation=ya.rotation.z,w.scale.x=ya.scale.x*Math.abs(w.x-
-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),w.scale.y=ya.scale.y*Math.abs(w.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),w.material=ya.material,G.elements.push(w)));!0===S&&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};
+n;g++)if(wa=G.objects[g].object,ua=wa.matrixWorld,j=0,wa instanceof THREE.Mesh){Ca=wa.geometry;da=Ca.vertices;Ka=Ca.faces;cb=Ca.faceVertexUvs;I.getInverse(ua);I.transpose();Ca=(wb=wa.material instanceof THREE.MeshFaceMaterial)&&0<wa.material.materials.length?wa.material.materials:wa.geometry.materials;Q=0;for(ha=da.length;Q<ha;Q++)i=b(),i.positionWorld.copy(da[Q]),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>$&&i.positionScreen.z<K;da=0;for(Q=Ka.length;da<Q;da++)if(ha=Ka[da],Ua=!0===wb?Ca[ha.materialIndex]:wa.material,void 0!==Ua){ba=Ua.side;if(ha instanceof THREE.Face3)if(Y=l[ha.a],aa=l[ha.b],ia=l[ha.c],!0===Y.visible&&!0===aa.visible&&!0===ia.visible)if(ja=0>(ia.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(ia.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.positionScreen.x),ba===THREE.DoubleSide||
+ja===(ba===THREE.FrontSide))p===q?(va=new THREE.RenderableFace3,o.push(va),q++,p++,m=va):m=o[p++],m.v1.copy(Y),m.v2.copy(aa),m.v3.copy(ia);else continue;else continue;else if(ha instanceof THREE.Face4)if(Y=l[ha.a],aa=l[ha.b],ia=l[ha.c],va=l[ha.d],!0===Y.visible&&!0===aa.visible&&!0===ia.visible&&!0===va.visible)if(ja=0>(va.positionScreen.x-Y.positionScreen.x)*(aa.positionScreen.y-Y.positionScreen.y)-(va.positionScreen.y-Y.positionScreen.y)*(aa.positionScreen.x-Y.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),ba===THREE.DoubleSide||ja===(ba===THREE.FrontSide)){if(t===A){var kb=new THREE.RenderableFace4;r.push(kb);A++;t++;m=kb}else m=r[t++];m.v1.copy(Y);m.v2.copy(aa);m.v3.copy(ia);m.v4.copy(va)}else continue;else continue;m.normalWorld.copy(ha.normal);!1===ja&&(ba===THREE.BackSide||ba===THREE.DoubleSide)&&m.normalWorld.negate();I.multiplyVector3(m.normalWorld).normalize();
+m.centroidWorld.copy(ha.centroid);ua.multiplyVector3(m.centroidWorld);m.centroidScreen.copy(m.centroidWorld);J.multiplyVector3(m.centroidScreen);ia=ha.vertexNormals;Y=0;for(aa=ia.length;Y<aa;Y++)va=m.vertexNormalsWorld[Y],va.copy(ia[Y]),!1===ja&&(ba===THREE.BackSide||ba===THREE.DoubleSide)&&va.negate(),I.multiplyVector3(va).normalize();m.vertexNormalsLength=ia.length;Y=0;for(aa=cb.length;Y<aa;Y++)if(va=cb[Y][da],void 0!==va){ba=0;for(ia=va.length;ba<ia;ba++)m.uvs[Y][ba]=va[ba]}m.color=ha.color;m.material=
+Ua;m.z=m.centroidScreen.z;G.elements.push(m)}}else if(wa instanceof THREE.Line){H.multiply(J,ua);da=wa.geometry.vertices;Y=b();Y.positionScreen.copy(da[0]);H.multiplyVector4(Y.positionScreen);ua=wa.type===THREE.LinePieces?2:1;Q=1;for(ha=da.length;Q<ha;Q++)Y=b(),Y.positionScreen.copy(da[Q]),H.multiplyVector4(Y.positionScreen),0<(Q+1)%ua||(aa=l[j-2],N.copy(Y.positionScreen),M.copy(aa.positionScreen),!0===d(N,M)&&(N.multiplyScalar(1/N.w),M.multiplyScalar(1/M.w),s===z?(Ka=new THREE.RenderableLine,D.push(Ka),
+z++,s++,u=Ka):u=D[s++],u.v1.positionScreen.copy(N),u.v2.positionScreen.copy(M),u.z=Math.max(N.z,M.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===E?($=new THREE.RenderableParticle,C.push($),E++,v++,w=$):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===S&&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*
 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);
 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();
 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.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.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){A!==a&&(A=q.globalAlpha=a)}function c(a){u!==a&&(a===THREE.NormalBlending?q.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?q.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(q.globalCompositeOperation="darker"),u=a)}function d(a){s!==a&&(s=q.strokeStyle=a)}function e(a){D!==a&&(D=q.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,i,j=new THREE.Projector,l=void 0!==a.canvas?a.canvas:
 THREE.CanvasRenderer=function(a){function b(a){A!==a&&(A=q.globalAlpha=a)}function c(a){u!==a&&(a===THREE.NormalBlending?q.globalCompositeOperation="source-over":a===THREE.AdditiveBlending?q.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(q.globalCompositeOperation="darker"),u=a)}function d(a){s!==a&&(s=q.strokeStyle=a)}function e(a){D!==a&&(D=q.fillStyle=a)}console.log("THREE.CanvasRenderer",THREE.REVISION);var a=a||{},f=this,g,h,i,j=new THREE.Projector,l=void 0!==a.canvas?a.canvas:
-document.createElement("canvas"),n,m,p,o,q=l.getContext("2d"),t=new THREE.Color(0),r=0,A=1,u=0,s=null,D=null,z=null,w=null,v=null,C,E,G,L,B=new THREE.RenderableVertex,J=new THREE.RenderableVertex,H,I,O,N,M,T,R,P,S,$,K,ja,Q=new THREE.Color,ha=new THREE.Color,da=new THREE.Color,Y=new THREE.Color,aa=new THREE.Color,ba=new THREE.Color,ia=new THREE.Color,ya={},Na={},za,Oa,Aa,pa,xb,Va,fb,kb,Bb,Cb,eb=new THREE.Rectangle,Ra=new THREE.Rectangle,Ia=new THREE.Rectangle,lb=!1,La=new THREE.Color,$a=new THREE.Color,
-db=new THREE.Color,ka=new THREE.Vector3,ab,bb,mb,ua,gb,qb,a=16;ab=document.createElement("canvas");ab.width=ab.height=2;bb=ab.getContext("2d");bb.fillStyle="rgba(0,0,0,1)";bb.fillRect(0,0,2,2);mb=bb.getImageData(0,0,2,2);ua=mb.data;gb=document.createElement("canvas");gb.width=gb.height=a;qb=gb.getContext("2d");qb.translate(-a/2,-a/2);qb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;m=b;p=
-Math.floor(n/2);o=Math.floor(m/2);l.width=n;l.height=m;eb.set(-p,-o,p,o);Ra.set(-p,-o,p,o);A=1;u=0;v=w=z=D=s=null};this.setClearColor=function(a,b){t.copy(a);r=void 0!==b?b:1;Ra.set(-p,-o,p,o)};this.setClearColorHex=function(a,b){t.setHex(a);r=void 0!==b?b:1;Ra.set(-p,-o,p,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){q.setTransform(1,0,0,-1,p,o);!1===Ra.isEmpty()&&(Ra.minSelf(eb),Ra.inflate(2),1>r&&q.clearRect(Math.floor(Ra.getX()),Math.floor(Ra.getY()),Math.floor(Ra.getWidth()),
-Math.floor(Ra.getHeight())),0<r&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+r+")"),q.fillRect(Math.floor(Ra.getX()),Math.floor(Ra.getY()),Math.floor(Ra.getWidth()),Math.floor(Ra.getHeight()))),Ra.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,m,p,o,q=l.getContext("2d"),t=new THREE.Color(0),r=0,A=1,u=0,s=null,D=null,z=null,w=null,v=null,C,E,G,L,B=new THREE.RenderableVertex,J=new THREE.RenderableVertex,H,I,O,N,M,T,R,P,S,$,K,ja,Q=new THREE.Color,ha=new THREE.Color,da=new THREE.Color,Y=new THREE.Color,aa=new THREE.Color,ba=new THREE.Color,ia=new THREE.Color,wa={},ua={},Ca,Ka,va,cb,wb,Ua,fb,kb,Ab,Bb,eb=new THREE.Rectangle,xa=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,gb,pb,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;gb=document.createElement("canvas");gb.width=gb.height=a;pb=gb.getContext("2d");pb.translate(-a/2,-a/2);pb.scale(a,a);a--;this.domElement=l;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.setSize=function(a,b){n=a;m=b;p=
+Math.floor(n/2);o=Math.floor(m/2);l.width=n;l.height=m;eb.set(-p,-o,p,o);xa.set(-p,-o,p,o);A=1;u=0;v=w=z=D=s=null};this.setClearColor=function(a,b){t.copy(a);r=void 0!==b?b:1;xa.set(-p,-o,p,o)};this.setClearColorHex=function(a,b){t.setHex(a);r=void 0!==b?b:1;xa.set(-p,-o,p,o)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){q.setTransform(1,0,0,-1,p,o);!1===xa.isEmpty()&&(xa.minSelf(eb),xa.inflate(2),1>r&&q.clearRect(Math.floor(xa.getX()),Math.floor(xa.getY()),Math.floor(xa.getWidth()),
+Math.floor(xa.getHeight())),0<r&&(c(THREE.NormalBlending),b(1),e("rgba("+Math.floor(255*t.r)+","+Math.floor(255*t.g)+","+Math.floor(255*t.b)+","+r+")"),q.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,
 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;O=d.positionScreen.x;N=d.positionScreen.y;M=e.positionScreen.x;T=e.positionScreen.y;r(H,I,O,N,M,T);(j instanceof
 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;O=d.positionScreen.x;N=d.positionScreen.y;M=e.positionScreen.x;T=e.positionScreen.y;r(H,I,O,N,M,T);(j instanceof
-THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(ba.copy(j.color),ia.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(ba.r*=i.color.r,ba.g*=i.color.g,ba.b*=i.color.b),!0===lb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ha.r=da.r=Y.r=La.r,ha.g=da.g=Y.g=La.g,ha.b=da.b=Y.b=La.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ha),m(i.v2.positionWorld,i.vertexNormalsWorld[1],da),m(i.v3.positionWorld,i.vertexNormalsWorld[2],
-Y),ha.r=ha.r*ba.r+ia.r,ha.g=ha.g*ba.g+ia.g,ha.b=ha.b*ba.b+ia.b,da.r=da.r*ba.r+ia.r,da.g=da.g*ba.g+ia.g,da.b=da.b*ba.b+ia.b,Y.r=Y.r*ba.r+ia.r,Y.g=Y.g*ba.g+ia.g,Y.b=Y.b*ba.b+ia.b,aa.r=0.5*(da.r+Y.r),aa.g=0.5*(da.g+Y.g),aa.b=0.5*(da.b+Y.b),Aa=wc(ha,da,Y,aa),ma(H,I,O,N,M,T,0,0,1,0,0,1,Aa)):(Q.r=La.r,Q.g=La.g,Q.b=La.b,m(i.centroidWorld,i.normalWorld,Q),Q.r=Q.r*ba.r+ia.r,Q.g=Q.g*ba.g+ia.g,Q.b=Q.b*ba.b+ia.b,!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q)):!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&&(pa=i.uvs[0],A(H,I,O,N,M,T,pa[g].u,pa[g].v,pa[h].u,pa[h].v,pa[k].u,pa[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,Va=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,ka.copy(i.vertexNormalsWorld[h]),fb=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[k]),Bb=0.5*(ka.x*a.elements[0]+ka.y*a.elements[4]+ka.z*a.elements[8])+0.5,Cb=0.5*(ka.x*a.elements[1]+ka.y*a.elements[5]+ka.z*a.elements[9])+0.5,A(H,I,O,N,M,T,xb,Va,fb,kb,Bb,Cb,j.envMap)):(Q.copy(j.color),
-j.vertexColors===THREE.FaceColors&&(Q.r*=i.color.r,Q.g*=i.color.g,Q.b*=i.color.b),!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q)):j instanceof THREE.MeshDepthMaterial?(za=l.near,Oa=l.far,ha.r=ha.g=ha.b=1-nb(a.positionScreen.z,za,Oa),da.r=da.g=da.b=1-nb(d.positionScreen.z,za,Oa),Y.r=Y.g=Y.b=1-nb(e.positionScreen.z,za,Oa),aa.r=0.5*(da.r+Y.r),aa.g=0.5*(da.g+Y.g),aa.b=0.5*(da.b+Y.b),Aa=wc(ha,da,Y,aa),ma(H,I,O,N,M,T,0,0,1,0,0,1,Aa)):j instanceof THREE.MeshNormalMaterial&&
-(Q.r=gc(i.normalWorld.x),Q.g=gc(i.normalWorld.y),Q.b=gc(i.normalWorld.z),!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q))}function r(a,b,c,d,e,f){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.closePath()}function t(a,b,c,d,e,f,g,h){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.lineTo(g,h);q.closePath()}function s(a,b,c,e){z!==b&&(z=q.lineWidth=b);w!==c&&(w=q.lineCap=c);v!==e&&(v=q.lineJoin=e);d(a.getContextStyle());q.stroke();Ia.inflate(2*
-b)}function u(a){e(a.getContextStyle());q.fill()}function A(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,nb=ma.wrapT==THREE.RepeatWrapping;ya[ma.id]=q.createPattern(ma.image,!0===n&&!0===nb?"repeat":!0===n&&!1===nb?"repeat-x":!1===n&&!0===nb?"repeat-y":"no-repeat");ma.needsUpdate=!1}void 0===ya[ma.id]?e("rgba(0,0,0,1)"):e(ya[ma.id]);var n=ma.offset.x/ma.repeat.x,nb=ma.offset.y/
-ma.repeat.y,o=ma.image.width*ma.repeat.x,p=ma.image.height*ma.repeat.y,h=(h+n)*o,k=(1-k+nb)*p,c=c-a,d=d-b,f=f-a,g=g-b,i=(i+n)*o-h,j=(1-j+nb)*p-k,l=(l+n)*o-h,m=(1-m+nb)*p-k,n=i*m-l*j;0===n?(void 0===Na[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),Na[ma.id]=b.getImageData(0,0,ma.image.width,ma.image.height).data),b=Na[ma.id],h=4*(Math.floor(h)+Math.floor(k)*ma.image.width),Q.setRGB(b[h]/255,b[h+1]/255,b[h+
-2]/255),u(Q)):(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,q.save(),q.transform(ma,j,c,d,a,h),q.fill(),q.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;q.save();q.transform(ma,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.restore()}function wc(a,b,c,d){ua[0]=255*
-a.r|0;ua[1]=255*a.g|0;ua[2]=255*a.b|0;ua[4]=255*b.r|0;ua[5]=255*b.g|0;ua[6]=255*b.b|0;ua[8]=255*c.r|0;ua[9]=255*c.g|0;ua[10]=255*c.b|0;ua[12]=255*d.r|0;ua[13]=255*d.g|0;ua[14]=255*d.b|0;bb.putImageData(mb,0,0);qb.drawImage(ab,0,0);return gb}function nb(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,ea;!0===this.autoClear?this.clear():q.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){La.setRGB(0,0,0);$a.setRGB(0,0,0);db.setRGB(0,0,0);Yb=0;for(xc=i.length;Yb<xc;Yb++){ea=i[Yb];var oa=ea.color;ea instanceof THREE.AmbientLight?(La.r+=oa.r,La.g+=oa.g,La.b+=oa.b):ea instanceof THREE.DirectionalLight?($a.r+=oa.r,$a.g+=oa.g,$a.b+=oa.b):ea 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],ea=na.material,!(void 0===ea||!1===ea.visible)){Ia.empty();if(na instanceof THREE.RenderableParticle){C=na;C.x*=p;C.y*=o;var oa=C,D=na;b(ea.opacity);c(ea.blending);var zb=void 0,Ab=void 0,rb=void 0,sb=void 0,hc=na=void 0,Pc=void 0;ea instanceof THREE.ParticleBasicMaterial?null===ea.map?(rb=D.object.scale.x,sb=D.object.scale.y,rb*=D.scale.x*p,sb*=D.scale.y*o,Ia.set(oa.x-rb,oa.y-sb,oa.x+rb,oa.y+sb),!1!==eb.intersects(Ia)&&
-(e(ea.color.getContextStyle()),q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(rb,sb),q.fillRect(-1,-1,2,2),q.restore())):(na=ea.map.image,hc=na.width>>1,Pc=na.height>>1,rb=D.scale.x*p,sb=D.scale.y*o,zb=rb*hc,Ab=sb*Pc,Ia.set(oa.x-zb,oa.y-Ab,oa.x+zb,oa.y+Ab),!1!==eb.intersects(Ia)&&(q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(rb,-sb),q.translate(-hc,-Pc),q.drawImage(na,0,0),q.restore())):ea instanceof THREE.ParticleCanvasMaterial&&(zb=D.scale.x*p,Ab=D.scale.y*o,Ia.set(oa.x-
-zb,oa.y-Ab,oa.x+zb,oa.y+Ab),!1!==eb.intersects(Ia)&&(d(ea.color.getContextStyle()),e(ea.color.getContextStyle()),q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(zb,Ab),ea.program(q),q.restore()))}else if(na instanceof THREE.RenderableLine){if(C=na.v1,E=na.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,E.positionScreen.x*=p,E.positionScreen.y*=o,Ia.addPoint(C.positionScreen.x,C.positionScreen.y),Ia.addPoint(E.positionScreen.x,E.positionScreen.y),!0===eb.intersects(Ia)&&(oa=C,D=E,b(ea.opacity),
-c(ea.blending),q.beginPath(),q.moveTo(oa.positionScreen.x,oa.positionScreen.y),q.lineTo(D.positionScreen.x,D.positionScreen.y),ea instanceof THREE.LineBasicMaterial))oa=ea.linewidth,z!==oa&&(z=q.lineWidth=oa),oa=ea.linecap,w!==oa&&(w=q.lineCap=oa),oa=ea.linejoin,v!==oa&&(v=q.lineJoin=oa),d(ea.color.getContextStyle()),q.stroke(),Ia.inflate(2*ea.linewidth)}else if(na instanceof THREE.RenderableFace3)C=na.v1,E=na.v2,G=na.v3,C.positionScreen.x*=p,C.positionScreen.y*=o,E.positionScreen.x*=p,E.positionScreen.y*=
-o,G.positionScreen.x*=p,G.positionScreen.y*=o,!0===ea.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,G.positionScreen),Xb(G.positionScreen,C.positionScreen)),Ia.add3Points(C.positionScreen.x,C.positionScreen.y,E.positionScreen.x,E.positionScreen.y,G.positionScreen.x,G.positionScreen.y),!0===eb.intersects(Ia)&&n(C,E,G,0,1,2,na,ea,a);else if(na instanceof THREE.RenderableFace4&&(C=na.v1,E=na.v2,G=na.v3,L=na.v4,C.positionScreen.x*=p,C.positionScreen.y*=o,E.positionScreen.x*=p,E.positionScreen.y*=
-o,G.positionScreen.x*=p,G.positionScreen.y*=o,L.positionScreen.x*=p,L.positionScreen.y*=o,B.positionScreen.copy(E.positionScreen),J.positionScreen.copy(L.positionScreen),!0===ea.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,L.positionScreen),Xb(L.positionScreen,C.positionScreen),Xb(G.positionScreen,B.positionScreen),Xb(G.positionScreen,J.positionScreen)),Ia.addPoint(C.positionScreen.x,C.positionScreen.y),Ia.addPoint(E.positionScreen.x,E.positionScreen.y),Ia.addPoint(G.positionScreen.x,
-G.positionScreen.y),Ia.addPoint(L.positionScreen.x,L.positionScreen.y),!0===eb.intersects(Ia)))(oa=C,D=E,zb=G,Ab=L,rb=B,sb=J,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(ea.opacity),c(ea.blending),void 0!==ea.map&&null!==ea.map||void 0!==ea.envMap&&null!==ea.envMap)?(n(oa,D,Ab,0,1,3,na,ea,hc),n(rb,zb,sb,1,2,3,na,ea,hc)):(H=oa.positionScreen.x,I=oa.positionScreen.y,O=D.positionScreen.x,N=D.positionScreen.y,M=zb.positionScreen.x,T=zb.positionScreen.y,R=Ab.positionScreen.x,P=Ab.positionScreen.y,
-S=rb.positionScreen.x,$=rb.positionScreen.y,K=sb.positionScreen.x,ja=sb.positionScreen.y,ea instanceof THREE.MeshLambertMaterial||ea instanceof THREE.MeshPhongMaterial)?(ba.copy(ea.color),ia.copy(ea.emissive),ea.vertexColors===THREE.FaceColors&&(ba.r*=na.color.r,ba.g*=na.color.g,ba.b*=na.color.b),!0===lb)?!1===ea.wireframe&&ea.shading==THREE.SmoothShading&&4==na.vertexNormalsLength?(ha.r=da.r=Y.r=aa.r=La.r,ha.g=da.g=Y.g=aa.g=La.g,ha.b=da.b=Y.b=aa.b=La.b,m(na.v1.positionWorld,na.vertexNormalsWorld[0],
-ha),m(na.v2.positionWorld,na.vertexNormalsWorld[1],da),m(na.v4.positionWorld,na.vertexNormalsWorld[3],Y),m(na.v3.positionWorld,na.vertexNormalsWorld[2],aa),ha.r=ha.r*ba.r+ia.r,ha.g=ha.g*ba.g+ia.g,ha.b=ha.b*ba.b+ia.b,da.r=da.r*ba.r+ia.r,da.g=da.g*ba.g+ia.g,da.b=da.b*ba.b+ia.b,Y.r=Y.r*ba.r+ia.r,Y.g=Y.g*ba.g+ia.g,Y.b=Y.b*ba.b+ia.b,aa.r=aa.r*ba.r+ia.r,aa.g=aa.g*ba.g+ia.g,aa.b=aa.b*ba.b+ia.b,Aa=wc(ha,da,Y,aa),r(H,I,O,N,R,P),ma(H,I,O,N,R,P,0,0,1,0,0,1,Aa),r(S,$,M,T,K,ja),ma(S,$,M,T,K,ja,1,0,1,1,0,1,Aa)):
-(Q.r=La.r,Q.g=La.g,Q.b=La.b,m(na.centroidWorld,na.normalWorld,Q),Q.r=Q.r*ba.r+ia.r,Q.g=Q.g*ba.g+ia.g,Q.b=Q.b*ba.b+ia.b,t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):(Q.r=ba.r+ia.r,Q.g=ba.g+ia.g,Q.b=ba.b+ia.b,t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshBasicMaterial?(Q.copy(ea.color),ea.vertexColors===THREE.FaceColors&&(Q.r*=na.color.r,Q.g*=na.color.g,
-Q.b*=na.color.b),t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshNormalMaterial?(Q.r=gc(na.normalWorld.x),Q.g=gc(na.normalWorld.y),Q.b=gc(na.normalWorld.z),t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshDepthMaterial&&(za=l.near,Oa=l.far,ha.r=ha.g=ha.b=1-nb(oa.positionScreen.z,za,Oa),da.r=da.g=da.b=1-nb(D.positionScreen.z,za,
-Oa),Y.r=Y.g=Y.b=1-nb(Ab.positionScreen.z,za,Oa),aa.r=aa.g=aa.b=1-nb(zb.positionScreen.z,za,Oa),Aa=wc(ha,da,Y,aa),r(H,I,O,N,R,P),ma(H,I,O,N,R,P,0,0,1,0,0,1,Aa),r(S,$,M,T,K,ja),ma(S,$,M,T,K,ja,1,0,1,1,0,1,Aa));Ra.addRectangle(Ia)}q.setTransform(1,0,0,1,0,0)}}};
+THREE.MeshLambertMaterial||j instanceof THREE.MeshPhongMaterial)&&null===j.map&&null===j.map?(ba.copy(j.color),ia.copy(j.emissive),j.vertexColors===THREE.FaceColors&&(ba.r*=i.color.r,ba.g*=i.color.g,ba.b*=i.color.b),!0===lb)?!1===j.wireframe&&j.shading==THREE.SmoothShading&&3==i.vertexNormalsLength?(ha.r=da.r=Y.r=Na.r,ha.g=da.g=Y.g=Na.g,ha.b=da.b=Y.b=Na.b,m(i.v1.positionWorld,i.vertexNormalsWorld[0],ha),m(i.v2.positionWorld,i.vertexNormalsWorld[1],da),m(i.v3.positionWorld,i.vertexNormalsWorld[2],
+Y),ha.r=ha.r*ba.r+ia.r,ha.g=ha.g*ba.g+ia.g,ha.b=ha.b*ba.b+ia.b,da.r=da.r*ba.r+ia.r,da.g=da.g*ba.g+ia.g,da.b=da.b*ba.b+ia.b,Y.r=Y.r*ba.r+ia.r,Y.g=Y.g*ba.g+ia.g,Y.b=Y.b*ba.b+ia.b,aa.r=0.5*(da.r+Y.r),aa.g=0.5*(da.g+Y.g),aa.b=0.5*(da.b+Y.b),va=wc(ha,da,Y,aa),ma(H,I,O,N,M,T,0,0,1,0,0,1,va)):(Q.r=Na.r,Q.g=Na.g,Q.b=Na.b,m(i.centroidWorld,i.normalWorld,Q),Q.r=Q.r*ba.r+ia.r,Q.g=Q.g*ba.g+ia.g,Q.b=Q.b*ba.b+ia.b,!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q)):!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&&(cb=i.uvs[0],A(H,I,O,N,M,T,cb[g].u,cb[g].v,cb[h].u,cb[h].v,cb[k].u,cb[k].v,j.map)):null!==j.envMap?j.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(a=l.matrixWorldInverse,ka.copy(i.vertexNormalsWorld[g]),wb=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]),fb=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[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,A(H,I,O,N,M,T,wb,Ua,fb,kb,Ab,Bb,j.envMap)):(Q.copy(j.color),
+j.vertexColors===THREE.FaceColors&&(Q.r*=i.color.r,Q.g*=i.color.g,Q.b*=i.color.b),!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q)):j instanceof THREE.MeshDepthMaterial?(Ca=l.near,Ka=l.far,ha.r=ha.g=ha.b=1-Cb(a.positionScreen.z,Ca,Ka),da.r=da.g=da.b=1-Cb(d.positionScreen.z,Ca,Ka),Y.r=Y.g=Y.b=1-Cb(e.positionScreen.z,Ca,Ka),aa.r=0.5*(da.r+Y.r),aa.g=0.5*(da.g+Y.g),aa.b=0.5*(da.b+Y.b),va=wc(ha,da,Y,aa),ma(H,I,O,N,M,T,0,0,1,0,0,1,va)):j instanceof THREE.MeshNormalMaterial&&
+(Q.r=gc(i.normalWorld.x),Q.g=gc(i.normalWorld.y),Q.b=gc(i.normalWorld.z),!0===j.wireframe?s(Q,j.wireframeLinewidth,j.wireframeLinecap,j.wireframeLinejoin):u(Q))}function r(a,b,c,d,e,f){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.closePath()}function t(a,b,c,d,e,f,g,h){q.beginPath();q.moveTo(a,b);q.lineTo(c,d);q.lineTo(e,f);q.lineTo(g,h);q.closePath()}function s(a,b,c,e){z!==b&&(z=q.lineWidth=b);w!==c&&(w=q.lineCap=c);v!==e&&(v=q.lineJoin=e);d(a.getContextStyle());q.stroke();La.inflate(2*
+b)}function u(a){e(a.getContextStyle());q.fill()}function A(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]=q.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,
+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),Q.setRGB(b[h]/255,b[h+1]/255,b[h+2]/255),u(Q)):
+(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,q.save(),q.transform(ma,j,c,d,a,h),q.fill(),q.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;q.save();q.transform(ma,i,c,d,a,b);q.clip();q.drawImage(m,0,0);q.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(mb,0,0);pb.drawImage($a,0,0);return gb}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,ea;!0===this.autoClear?this.clear():q.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++){ea=i[Yb];var oa=ea.color;ea instanceof THREE.AmbientLight?(Na.r+=oa.r,Na.g+=oa.g,Na.b+=oa.b):ea instanceof THREE.DirectionalLight?(Za.r+=oa.r,Za.g+=oa.g,Za.b+=oa.b):ea 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],ea=na.material,!(void 0===ea||!1===ea.visible)){La.empty();if(na instanceof THREE.RenderableParticle){C=na;C.x*=p;C.y*=o;var oa=C,D=na;b(ea.opacity);c(ea.blending);var yb=void 0,zb=void 0,qb=void 0,rb=void 0,hc=na=void 0,Pc=void 0;ea instanceof THREE.ParticleBasicMaterial?null===ea.map?(qb=D.object.scale.x,rb=D.object.scale.y,qb*=D.scale.x*p,rb*=D.scale.y*o,La.set(oa.x-qb,oa.y-rb,oa.x+qb,oa.y+rb),!1!==eb.intersects(La)&&
+(e(ea.color.getContextStyle()),q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(qb,rb),q.fillRect(-1,-1,2,2),q.restore())):(na=ea.map.image,hc=na.width>>1,Pc=na.height>>1,qb=D.scale.x*p,rb=D.scale.y*o,yb=qb*hc,zb=rb*Pc,La.set(oa.x-yb,oa.y-zb,oa.x+yb,oa.y+zb),!1!==eb.intersects(La)&&(q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(qb,-rb),q.translate(-hc,-Pc),q.drawImage(na,0,0),q.restore())):ea instanceof THREE.ParticleCanvasMaterial&&(yb=D.scale.x*p,zb=D.scale.y*o,La.set(oa.x-
+yb,oa.y-zb,oa.x+yb,oa.y+zb),!1!==eb.intersects(La)&&(d(ea.color.getContextStyle()),e(ea.color.getContextStyle()),q.save(),q.translate(oa.x,oa.y),q.rotate(-D.rotation),q.scale(yb,zb),ea.program(q),q.restore()))}else if(na instanceof THREE.RenderableLine){if(C=na.v1,E=na.v2,C.positionScreen.x*=p,C.positionScreen.y*=o,E.positionScreen.x*=p,E.positionScreen.y*=o,La.addPoint(C.positionScreen.x,C.positionScreen.y),La.addPoint(E.positionScreen.x,E.positionScreen.y),!0===eb.intersects(La)&&(oa=C,D=E,b(ea.opacity),
+c(ea.blending),q.beginPath(),q.moveTo(oa.positionScreen.x,oa.positionScreen.y),q.lineTo(D.positionScreen.x,D.positionScreen.y),ea instanceof THREE.LineBasicMaterial))oa=ea.linewidth,z!==oa&&(z=q.lineWidth=oa),oa=ea.linecap,w!==oa&&(w=q.lineCap=oa),oa=ea.linejoin,v!==oa&&(v=q.lineJoin=oa),d(ea.color.getContextStyle()),q.stroke(),La.inflate(2*ea.linewidth)}else if(na instanceof THREE.RenderableFace3)C=na.v1,E=na.v2,G=na.v3,C.positionScreen.x*=p,C.positionScreen.y*=o,E.positionScreen.x*=p,E.positionScreen.y*=
+o,G.positionScreen.x*=p,G.positionScreen.y*=o,!0===ea.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,G.positionScreen),Xb(G.positionScreen,C.positionScreen)),La.add3Points(C.positionScreen.x,C.positionScreen.y,E.positionScreen.x,E.positionScreen.y,G.positionScreen.x,G.positionScreen.y),!0===eb.intersects(La)&&n(C,E,G,0,1,2,na,ea,a);else if(na instanceof THREE.RenderableFace4&&(C=na.v1,E=na.v2,G=na.v3,L=na.v4,C.positionScreen.x*=p,C.positionScreen.y*=o,E.positionScreen.x*=p,E.positionScreen.y*=
+o,G.positionScreen.x*=p,G.positionScreen.y*=o,L.positionScreen.x*=p,L.positionScreen.y*=o,B.positionScreen.copy(E.positionScreen),J.positionScreen.copy(L.positionScreen),!0===ea.overdraw&&(Xb(C.positionScreen,E.positionScreen),Xb(E.positionScreen,L.positionScreen),Xb(L.positionScreen,C.positionScreen),Xb(G.positionScreen,B.positionScreen),Xb(G.positionScreen,J.positionScreen)),La.addPoint(C.positionScreen.x,C.positionScreen.y),La.addPoint(E.positionScreen.x,E.positionScreen.y),La.addPoint(G.positionScreen.x,
+G.positionScreen.y),La.addPoint(L.positionScreen.x,L.positionScreen.y),!0===eb.intersects(La)))(oa=C,D=E,yb=G,zb=L,qb=B,rb=J,hc=a,f.info.render.vertices+=4,f.info.render.faces++,b(ea.opacity),c(ea.blending),void 0!==ea.map&&null!==ea.map||void 0!==ea.envMap&&null!==ea.envMap)?(n(oa,D,zb,0,1,3,na,ea,hc),n(qb,yb,rb,1,2,3,na,ea,hc)):(H=oa.positionScreen.x,I=oa.positionScreen.y,O=D.positionScreen.x,N=D.positionScreen.y,M=yb.positionScreen.x,T=yb.positionScreen.y,R=zb.positionScreen.x,P=zb.positionScreen.y,
+S=qb.positionScreen.x,$=qb.positionScreen.y,K=rb.positionScreen.x,ja=rb.positionScreen.y,ea instanceof THREE.MeshLambertMaterial||ea instanceof THREE.MeshPhongMaterial)?(ba.copy(ea.color),ia.copy(ea.emissive),ea.vertexColors===THREE.FaceColors&&(ba.r*=na.color.r,ba.g*=na.color.g,ba.b*=na.color.b),!0===lb)?!1===ea.wireframe&&ea.shading==THREE.SmoothShading&&4==na.vertexNormalsLength?(ha.r=da.r=Y.r=aa.r=Na.r,ha.g=da.g=Y.g=aa.g=Na.g,ha.b=da.b=Y.b=aa.b=Na.b,m(na.v1.positionWorld,na.vertexNormalsWorld[0],
+ha),m(na.v2.positionWorld,na.vertexNormalsWorld[1],da),m(na.v4.positionWorld,na.vertexNormalsWorld[3],Y),m(na.v3.positionWorld,na.vertexNormalsWorld[2],aa),ha.r=ha.r*ba.r+ia.r,ha.g=ha.g*ba.g+ia.g,ha.b=ha.b*ba.b+ia.b,da.r=da.r*ba.r+ia.r,da.g=da.g*ba.g+ia.g,da.b=da.b*ba.b+ia.b,Y.r=Y.r*ba.r+ia.r,Y.g=Y.g*ba.g+ia.g,Y.b=Y.b*ba.b+ia.b,aa.r=aa.r*ba.r+ia.r,aa.g=aa.g*ba.g+ia.g,aa.b=aa.b*ba.b+ia.b,va=wc(ha,da,Y,aa),r(H,I,O,N,R,P),ma(H,I,O,N,R,P,0,0,1,0,0,1,va),r(S,$,M,T,K,ja),ma(S,$,M,T,K,ja,1,0,1,1,0,1,va)):
+(Q.r=Na.r,Q.g=Na.g,Q.b=Na.b,m(na.centroidWorld,na.normalWorld,Q),Q.r=Q.r*ba.r+ia.r,Q.g=Q.g*ba.g+ia.g,Q.b=Q.b*ba.b+ia.b,t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):(Q.r=ba.r+ia.r,Q.g=ba.g+ia.g,Q.b=ba.b+ia.b,t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshBasicMaterial?(Q.copy(ea.color),ea.vertexColors===THREE.FaceColors&&(Q.r*=na.color.r,Q.g*=na.color.g,
+Q.b*=na.color.b),t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshNormalMaterial?(Q.r=gc(na.normalWorld.x),Q.g=gc(na.normalWorld.y),Q.b=gc(na.normalWorld.z),t(H,I,O,N,M,T,R,P),!0===ea.wireframe?s(Q,ea.wireframeLinewidth,ea.wireframeLinecap,ea.wireframeLinejoin):u(Q)):ea instanceof THREE.MeshDepthMaterial&&(Ca=l.near,Ka=l.far,ha.r=ha.g=ha.b=1-Cb(oa.positionScreen.z,Ca,Ka),da.r=da.g=da.b=1-Cb(D.positionScreen.z,Ca,
+Ka),Y.r=Y.g=Y.b=1-Cb(zb.positionScreen.z,Ca,Ka),aa.r=aa.g=aa.b=1-Cb(yb.positionScreen.z,Ca,Ka),va=wc(ha,da,Y,aa),r(H,I,O,N,R,P),ma(H,I,O,N,R,P,0,0,1,0,0,1,va),r(S,$,M,T,K,ja),ma(S,$,M,T,K,ja,1,0,1,1,0,1,va));xa.addRectangle(La)}q.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",
 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_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",
 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:
 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
 "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=
 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,q=a.__webglCustomAttributesList;if(c.sortParticles){bb.copy(ab);bb.multiplySelf(c.matrixWorld);for(d=0;d<g;d++)e=h[d],mb.copy(e),bb.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(q){i=0;for(j=q.length;i<j;i++)if(h=q[i],void 0===
+a.colors,j=i.length,l=a.__vertexArray,m=a.__colorArray,n=a.__sortArray,o=a.verticesNeedUpdate,p=a.colorsNeedUpdate,q=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(q){i=0;for(j=q.length;i<j;i++)if(h=q[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]=
 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(q){i=0;for(j=q.length;i<j;i++)if(h=q[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<
 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(q){i=0;for(j=q.length;i<j;i++)if(h=q[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(q){i=0;
 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(q){i=0;
 for(j=q.length;i<j;i++)if(h=q[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&&
 for(j=q.length;i<j;i++)if(h=q[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 l(a,b){return a.z!==
 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 l(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 m(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)ba=ha=null,Y=aa=za=Na=fb=Va=Oa=-1,gb=!0,a[d].render(b,c,$a,db),ba=ha=null,Y=aa=za=Na=fb=Va=Oa=-1,gb=!0}function p(a,b,c,d,e,f,g,h){var k,i,j,l;b?(i=a.length-1,l=b=-1):(i=0,b=a.length,l=1);for(var m=i;m!==b;m+=l)if(k=a[m],k.render){i=k.object;j=k.buffer;if(h)k=h;else{k=k[c];if(!k)continue;g&&K.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst);K.setDepthTest(k.depthTest);K.setDepthWrite(k.depthWrite);
+b.z?b.z-a.z:b.id-a.id}function n(a,b){return b[1]-a[1]}function m(a,b,c){if(a.length)for(var d=0,e=a.length;d<e;d++)ba=ha=null,Y=aa=Ca=ua=fb=Ua=Ka=-1,gb=!0,a[d].render(b,c,Za,db),ba=ha=null,Y=aa=Ca=ua=fb=Ua=Ka=-1,gb=!0}function p(a,b,c,d,e,f,g,h){var k,i,j,l;b?(i=a.length-1,l=b=-1):(i=0,b=a.length,l=1);for(var m=i;m!==b;m+=l)if(k=a[m],k.render){i=k.object;j=k.buffer;if(h)k=h;else{k=k[c];if(!k)continue;g&&K.setBlending(k.blending,k.blendEquation,k.blendSrc,k.blendDst);K.setDepthTest(k.depthTest);K.setDepthWrite(k.depthWrite);
 C(k.polygonOffset,k.polygonOffsetFactor,k.polygonOffsetUnits)}K.setMaterialFaces(k);j instanceof THREE.BufferGeometry?K.renderBufferDirect(d,e,f,k,j,i):K.renderBuffer(d,e,f,k,j,i)}}function o(a,b,c,d,e,f,g){for(var h,k,i=0,j=a.length;i<j;i++)if(h=a[i],k=h.object,k.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,
 C(k.polygonOffset,k.polygonOffsetFactor,k.polygonOffsetUnits)}K.setMaterialFaces(k);j instanceof THREE.BufferGeometry?K.renderBufferDirect(d,e,f,k,j,i):K.renderBuffer(d,e,f,k,j,i)}}function o(a,b,c,d,e,f,g){for(var h,k,i=0,j=a.length;i<j;i++)if(h=a[i],k=h.object,k.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,k)}}function q(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 r(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function A(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){ya=0;d.needsUpdate&&(d.program&&K.deallocateMaterial(d),K.initMaterial(d,b,c,e),d.needsUpdate=
+d,e,h,k)}}function q(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 r(a){for(var b in a.attributes)a.attributes[b].needsUpdate=!1}function A(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=
 !1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(K.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==ha&&(k.useProgram(g),ha=g,f=!0);d.id!==Y&&(Y=d.id,f=!0);if(f||a!==ba)k.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==ba&&(ba=a);if(d.skinning)if(fc&&e.useVertexTexture){if(null!==h.boneTexture){var j=D();k.uniform1i(h.boneTexture,j);K.setTexture(e.boneTexture,j)}}else null!==h.boneGlobalMatrices&&k.uniformMatrix4fv(h.boneGlobalMatrices,
 !1);d.morphTargets&&!e.__webglMorphTargetInfluences&&(e.__webglMorphTargetInfluences=new Float32Array(K.maxMorphTargets));var f=!1,g=d.program,h=g.uniforms,i=d.uniforms;g!==ha&&(k.useProgram(g),ha=g,f=!0);d.id!==Y&&(Y=d.id,f=!0);if(f||a!==ba)k.uniformMatrix4fv(h.projectionMatrix,!1,a._projectionMatrixArray),a!==ba&&(ba=a);if(d.skinning)if(fc&&e.useVertexTexture){if(null!==h.boneTexture){var j=D();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(gb){for(var l=0,m=0,n=0,o,p,q,r=qb,t=r.directional.colors,s=r.directional.positions,u=r.point.colors,z=r.point.positions,A=r.point.distances,B=r.spot.colors,C=r.spot.positions,E=r.spot.distances,G=r.spot.directions,Q=
-r.spot.anglesCos,J=r.spot.exponents,P=r.hemi.skyColors,N=r.hemi.groundColors,S=r.hemi.positions,M=0,R=0,O=0,da=0,ia=0,$=0,aa=0,ca=0,T=p=0,c=T=T=0,f=b.length;c<f;c++)j=b[c],j.onlyShadow||(o=j.color,q=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(t,p,o,q*q):v(t,p,o,q),ua.copy(j.matrixWorld.getPosition()),ua.subSelf(j.target.matrixWorld.getPosition()),
-ua.normalize(),s[p]=ua.x,s[p+1]=ua.y,s[p+2]=ua.z,M+=1)):j instanceof THREE.PointLight?($+=1,j.visible&&(T=3*R,K.gammaInput?w(u,T,o,q*q):v(u,T,o,q),q=j.matrixWorld.getPosition(),z[T]=q.x,z[T+1]=q.y,z[T+2]=q.z,A[R]=p,R+=1)):j instanceof THREE.SpotLight?(aa+=1,j.visible&&(T=3*O,K.gammaInput?w(B,T,o,q*q):v(B,T,o,q),q=j.matrixWorld.getPosition(),C[T]=q.x,C[T+1]=q.y,C[T+2]=q.z,E[O]=p,ua.copy(q),ua.subSelf(j.target.matrixWorld.getPosition()),ua.normalize(),G[T]=ua.x,G[T+1]=ua.y,G[T+2]=ua.z,Q[O]=Math.cos(j.angle),
-J[O]=j.exponent,O+=1)):j instanceof THREE.HemisphereLight&&(ca+=1,j.visible&&(o=j.color,p=j.groundColor,T=3*da,K.gammaInput?(q*=q,w(P,T,o,q),w(N,T,p,q)):(v(P,T,o,q),v(N,T,p,q)),ua.copy(j.matrixWorld.getPosition()),ua.normalize(),S[T]=ua.x,S[T+1]=ua.y,S[T+2]=ua.z,da+=1)));c=3*M;for(f=Math.max(t.length,3*ia);c<f;c++)t[c]=0;c=3*M;for(f=Math.max(s.length,3*ia);c<f;c++)s[c]=0;c=3*R;for(f=Math.max(u.length,3*$);c<f;c++)u[c]=0;c=3*R;for(f=Math.max(z.length,3*$);c<f;c++)z[c]=0;c=R;for(f=Math.max(A.length,
+!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(gb){for(var l=0,m=0,n=0,o,p,q,r=pb,t=r.directional.colors,s=r.directional.positions,u=r.point.colors,z=r.point.positions,A=r.point.distances,B=r.spot.colors,C=r.spot.positions,E=r.spot.distances,G=r.spot.directions,Q=
+r.spot.anglesCos,J=r.spot.exponents,P=r.hemi.skyColors,N=r.hemi.groundColors,S=r.hemi.positions,M=0,R=0,O=0,da=0,ia=0,$=0,aa=0,ca=0,T=p=0,c=T=T=0,f=b.length;c<f;c++)j=b[c],j.onlyShadow||(o=j.color,q=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(t,p,o,q*q):v(t,p,o,q),ta.copy(j.matrixWorld.getPosition()),ta.subSelf(j.target.matrixWorld.getPosition()),
+ta.normalize(),s[p]=ta.x,s[p+1]=ta.y,s[p+2]=ta.z,M+=1)):j instanceof THREE.PointLight?($+=1,j.visible&&(T=3*R,K.gammaInput?w(u,T,o,q*q):v(u,T,o,q),q=j.matrixWorld.getPosition(),z[T]=q.x,z[T+1]=q.y,z[T+2]=q.z,A[R]=p,R+=1)):j instanceof THREE.SpotLight?(aa+=1,j.visible&&(T=3*O,K.gammaInput?w(B,T,o,q*q):v(B,T,o,q),q=j.matrixWorld.getPosition(),C[T]=q.x,C[T+1]=q.y,C[T+2]=q.z,E[O]=p,ta.copy(q),ta.subSelf(j.target.matrixWorld.getPosition()),ta.normalize(),G[T]=ta.x,G[T+1]=ta.y,G[T+2]=ta.z,Q[O]=Math.cos(j.angle),
+J[O]=j.exponent,O+=1)):j instanceof THREE.HemisphereLight&&(ca+=1,j.visible&&(o=j.color,p=j.groundColor,T=3*da,K.gammaInput?(q*=q,w(P,T,o,q),w(N,T,p,q)):(v(P,T,o,q),v(N,T,p,q)),ta.copy(j.matrixWorld.getPosition()),ta.normalize(),S[T]=ta.x,S[T+1]=ta.y,S[T+2]=ta.z,da+=1)));c=3*M;for(f=Math.max(t.length,3*ia);c<f;c++)t[c]=0;c=3*M;for(f=Math.max(s.length,3*ia);c<f;c++)s[c]=0;c=3*R;for(f=Math.max(u.length,3*$);c<f;c++)u[c]=0;c=3*R;for(f=Math.max(z.length,3*$);c<f;c++)z[c]=0;c=R;for(f=Math.max(A.length,
 $);c<f;c++)A[c]=0;c=3*O;for(f=Math.max(B.length,3*aa);c<f;c++)B[c]=0;c=3*O;for(f=Math.max(C.length,3*aa);c<f;c++)C[c]=0;c=3*O;for(f=Math.max(G.length,3*aa);c<f;c++)G[c]=0;c=O;for(f=Math.max(Q.length,aa);c<f;c++)Q[c]=0;c=O;for(f=Math.max(J.length,aa);c<f;c++)J[c]=0;c=O;for(f=Math.max(E.length,aa);c<f;c++)E[c]=0;c=3*da;for(f=Math.max(P.length,3*ca);c<f;c++)P[c]=0;c=3*da;for(f=Math.max(N.length,3*ca);c<f;c++)N[c]=0;c=3*da;for(f=Math.max(S.length,3*ca);c<f;c++)S[c]=0;r.directional.length=M;r.point.length=
 $);c<f;c++)A[c]=0;c=3*O;for(f=Math.max(B.length,3*aa);c<f;c++)B[c]=0;c=3*O;for(f=Math.max(C.length,3*aa);c<f;c++)C[c]=0;c=3*O;for(f=Math.max(G.length,3*aa);c<f;c++)G[c]=0;c=O;for(f=Math.max(Q.length,aa);c<f;c++)Q[c]=0;c=O;for(f=Math.max(J.length,aa);c<f;c++)J[c]=0;c=O;for(f=Math.max(E.length,aa);c<f;c++)E[c]=0;c=3*da;for(f=Math.max(P.length,3*ca);c<f;c++)P[c]=0;c=3*da;for(f=Math.max(N.length,3*ca);c<f;c++)N[c]=0;c=3*da;for(f=Math.max(S.length,3*ca);c<f;c++)S[c]=0;r.directional.length=M;r.point.length=
-R;r.spot.length=O;r.hemi.length=da;r.ambient[0]=l;r.ambient[1]=m;r.ambient[2]=n;gb=!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=
+R;r.spot.length=O;r.hemi.length=da;r.ambient[0]=l;r.ambient[1]=m;r.ambient[2]=n;gb=!1}c=pb;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;
 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.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=
 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,r=c.image[l],s=Oc,r.width<=s&&r.height<=s||(u=Math.max(r.width,r.height),t=Math.floor(r.width*s/u),s=Math.floor(r.height*s/u),u=document.createElement("canvas"),u.width=t,u.height=s,u.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,t,s),r=u),m[n]=r):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);r=H(c.type);L(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){s=j[l].mipmaps;u=0;for(z=s.length;u<z;u++)t=
 j=[];for(l=0;6>l;l++)K.autoScaleCubemaps&&!f?(m=j,n=l,r=c.image[l],s=Oc,r.width<=s&&r.height<=s||(u=Math.max(r.width,r.height),t=Math.floor(r.width*s/u),s=Math.floor(r.height*s/u),u=document.createElement("canvas"),u.width=t,u.height=s,u.getContext("2d").drawImage(r,0,0,r.width,r.height,0,0,t,s),r=u),m[n]=r):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);r=H(c.type);L(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){s=j[l].mipmaps;u=0;for(z=s.length;u<z;u++)t=
 s[u],k.compressedTexImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+l,u,n,t.width,t.height,0,t.data)}else k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,n,n,r,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,
 s[u],k.compressedTexImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+l,u,n,t.width,t.height,0,t.data)}else k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+l,0,n,n,r,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]=D();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||
 j)}else if("tv"===l){void 0===c._array&&(c._array=[]);l=0;for(m=c.value.length;l<m;l++)c._array[l]=D();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 D(){var a=ya;a>=vc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+vc);ya+=1;return a}function z(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){kb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),kb=a);if(a&&(Bb!==b||Cb!==c))k.polygonOffset(b,c),Bb=b,Cb=c}function E(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 D(){var a=wa;a>=vc&&console.warn("Trying to use "+a+" texture units while this GPU supports only "+vc);wa+=1;return a}function z(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){kb!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),kb=a);if(a&&(Ab!==b||Bb!==c))k.polygonOffset(b,c),Ab=b,Bb=c}function E(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(E(b)),null):c}function L(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,
 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(E(b)),null):c}function L(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;
 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.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.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===
 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"),O=void 0!==a.precision?a.precision:"highp",N=void 0!==a.alpha?a.alpha:!0,M=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,T=void 0!==a.antialias?a.antialias:!1,R=void 0!==a.stencil?a.stencil:!0,P=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"),O=void 0!==a.precision?a.precision:"highp",N=void 0!==a.alpha?a.alpha:!0,M=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,T=void 0!==a.antialias?a.antialias:!1,R=void 0!==a.stencil?a.stencil:!0,P=void 0!==a.preserveDrawingBuffer?
 a.preserveDrawingBuffer:!1,S=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),$=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=
 a.preserveDrawingBuffer:!1,S=void 0!==a.clearColor?new THREE.Color(a.clearColor):new THREE.Color(0),$=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=[],Q=0,ha=null,da=null,Y=-1,aa=null,ba=null,ia=0,ya=0,Na=-1,za=-1,Oa=-1,Aa=-1,pa=-1,xb=-1,Va=-1,fb=-1,kb=null,Bb=null,Cb=null,eb=null,Ra=0,Ia=0,lb=0,La=0,$a=0,db=0,ka=new THREE.Frustum,ab=new THREE.Matrix4,bb=new THREE.Matrix4,mb=new THREE.Vector4,ua=new THREE.Vector3,
-gb=!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:M,antialias:T,stencil:R,preserveDrawingBuffer:P})))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(S.r,S.g,S.b,$);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){Ra=void 0!==a?a:0;Ia=void 0!==b?b:0;lb=void 0!==c?c:I.width;La=void 0!==d?d:I.height;k.viewport(Ra,Ia,lb,La)};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){S.setHex(a);$=b;k.clearColor(S.r,S.g,S.b,$)};this.setClearColor=function(a,b){S.copy(a);$=b;k.clearColor(S.r,S.g,S.b,$)};this.getClearColor=function(){return S};this.getClearAlpha=function(){return $};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=[],Q=0,ha=null,da=null,Y=-1,aa=null,ba=null,ia=0,wa=0,ua=-1,Ca=-1,Ka=-1,va=-1,cb=-1,wb=-1,Ua=-1,fb=-1,kb=null,Ab=null,Bb=null,eb=null,xa=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,
+gb=!0,pb={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:M,antialias:T,stencil:R,preserveDrawingBuffer:P})))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(S.r,S.g,S.b,$);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){xa=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(xa,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){S.setHex(a);$=b;k.clearColor(S.r,S.g,S.b,$)};this.setClearColor=function(a,b){S.copy(a);$=b;k.clearColor(S.r,S.g,S.b,$)};this.getClearColor=function(){return S};this.getClearAlpha=function(){return $};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,
 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);
 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
 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&&
 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=
 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){ha=null;Y=aa=fb=Va=Oa=-1;gb=!0;za=Na=-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){ha=null;Y=aa=fb=Ua=Ka=-1;gb=!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&&
 (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+
 (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,
 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
 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
@@ -423,9 +423,9 @@ h;g++)c=e.__webglCustomAttributesList[g],0<=b[c.buffer.belongsToAttribute]&&(k.b
 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!==eb&&(k.lineWidth(d),eb=d),a&&k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,e.__webglLineBuffer),k.drawElements(k.LINES,e.__webglLineCount,k.UNSIGNED_SHORT,
 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!==eb&&(k.lineWidth(d),eb=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!==eb&&(k.lineWidth(d),eb=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++,
 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!==eb&&(k.lineWidth(d),eb=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;Y=-1;gb=!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;Y=-1;gb=!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);ab.multiply(b.projectionMatrix,b.matrixWorldInverse);ka.setFromMatrix(ab);this.autoUpdateObjects&&this.initWebGLObjects(a);m(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);
+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);m(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))){z(g,b);var n=f,q=n.object,r=n.buffer,t=void 0,s=t=void 0,s=q.material;if(s instanceof THREE.MeshFaceMaterial)t=r.materialIndex,0<=t&&(t=0<s.materials.length?s.materials[t]:q.geometry.materials[t],t.transparent?(n.transparent=
 (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))){z(g,b);var n=f,q=n.object,r=n.buffer,t=void 0,s=t=void 0,s=q.material;if(s instanceof THREE.MeshFaceMaterial)t=r.materialIndex,0<=t&&(t=0<s.materials.length?s.materials[t]:q.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:(mb.copy(g.matrixWorld.getPosition()),ab.multiplyVector3(mb),f.z=mb.z),f.id=g.id)}this.sortObjects&&h.sort(l);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(z(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(l);h=a.__webglObjectsImmediate;d=0;for(e=h.length;d<e;d++)f=h[d],g=f.object,g.visible&&(z(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,
 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));m(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=
 "transparent",b,i,j,!0));m(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=
 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 J=void 0,Y=void 0;if(Q.numMorphTargets){Q.__webglMorphTarge
 THREE.ParticleSystem&&(n=b.geometry,!n.__webglVertexBuffer))if(n instanceof THREE.Geometry){var ha=n;ha.__webglVertexBuffer=k.createBuffer();ha.__webglColorBuffer=k.createBuffer();K.info.memory.geometries++;var T=n,$=b,ba=T.vertices.length;T.__vertexArray=new Float32Array(3*ba);T.__colorArray=new Float32Array(3*ba);T.__sortArray=[];T.__webglParticleCount=ba;c(T,$);n.verticesNeedUpdate=!0;n.colorsNeedUpdate=!0}else n instanceof THREE.BufferGeometry&&h(n);if(!b.__webglActive){if(b instanceof THREE.Mesh)if(n=
 THREE.ParticleSystem&&(n=b.geometry,!n.__webglVertexBuffer))if(n instanceof THREE.Geometry){var ha=n;ha.__webglVertexBuffer=k.createBuffer();ha.__webglColorBuffer=k.createBuffer();K.info.memory.geometries++;var T=n,$=b,ba=T.vertices.length;T.__vertexArray=new Float32Array(3*ba);T.__colorArray=new Float32Array(3*ba);T.__sortArray=[];T.__webglParticleCount=ba;c(T,$);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)q(l.__webglObjects,n,b);else for(m in n.geometryGroups)o=n.geometryGroups[m],q(l.__webglObjects,o,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(n=b.geometry,q(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.geometry,n instanceof THREE.BufferGeometry)q(l.__webglObjects,n,b);else for(m in n.geometryGroups)o=n.geometryGroups[m],q(l.__webglObjects,o,b);else b instanceof THREE.Ribbon||b instanceof THREE.Line||b instanceof THREE.ParticleSystem?(n=b.geometry,q(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?A(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)&&A(ja.__webglObjectsImmediate,aa);aa.__webglActive=!1;a.__objectsRemoved.splice(0,
 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?A(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)&&A(ja.__webglObjectsImmediate,aa);aa.__webglActive=!1;a.__objectsRemoved.splice(0,
-1)}for(var ya=0,Na=a.__webglObjects.length;ya<Na;ya++){var pa=a.__webglObjects[ya].object,ca=pa.geometry,ua=void 0,za=void 0,ka=void 0;if(pa instanceof THREE.Mesh)if(ca instanceof THREE.BufferGeometry)(ca.verticesNeedUpdate||ca.elementsNeedUpdate||ca.uvsNeedUpdate||ca.normalsNeedUpdate||ca.colorsNeedUpdate||ca.tangentsNeedUpdate)&&j(ca,k.DYNAMIC_DRAW,!ca.dynamic),ca.verticesNeedUpdate=!1,ca.elementsNeedUpdate=!1,ca.uvsNeedUpdate=!1,ca.normalsNeedUpdate=!1,ca.colorsNeedUpdate=!1,ca.tangentsNeedUpdate=
-!1;else{for(var Ia=0,Oa=ca.geometryGroupsList.length;Ia<Oa;Ia++)if(ua=ca.geometryGroupsList[Ia],ka=e(pa,ua),ca.buffersNeedUpdate&&d(ua,pa),za=ka.attributes&&t(ka),ca.verticesNeedUpdate||ca.morphTargetsNeedUpdate||ca.elementsNeedUpdate||ca.uvsNeedUpdate||ca.normalsNeedUpdate||ca.colorsNeedUpdate||ca.tangentsNeedUpdate||za){var ra=ua,La=pa,Aa=k.DYNAMIC_DRAW,Ra=!ca.dynamic,Va=ka;if(ra.__inittedArrays){var eb=f(Va),gb=Va.vertexColors?Va.vertexColors:!1,xb=g(Va),fb=eb===THREE.SmoothShading,F=void 0,Z=
-void 0,$a=void 0,U=void 0,db=void 0,ab=void 0,Db=void 0,mb=void 0,bb=void 0,kb=void 0,lb=void 0,V=void 0,W=void 0,X=void 0,qa=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,Bb=void 0,Qb=void 0,Rb=void 0,Sb=void 0,Cb=void 0,va=void 0,ec=void 0,Zb=void 0,ic=void 0,jc=void 0,Sa=void 0,fc=void 0,Pa=void 0,Qa=void 0,$b=void 0,Ub=void 0,Ja=0,Ma=0,Vb=0,Wb=0,tb=0,Ya=0,Ba=0,cb=0,Ka=0,ga=0,la=0,y=0,
-wa=void 0,Ta=ra.__vertexArray,nc=ra.__uvArray,oc=ra.__uv2Array,ub=ra.__normalArray,Ea=ra.__tangentArray,Ua=ra.__colorArray,Fa=ra.__skinIndexArray,Ga=ra.__skinWeightArray,Qc=ra.__morphTargetsArrays,Rc=ra.__morphNormalsArrays,Sc=ra.__webglCustomAttributesList,x=void 0,Tb=ra.__faceArray,ob=ra.__lineArray,hb=La.geometry,vc=hb.elementsNeedUpdate,mc=hb.uvsNeedUpdate,Nc=hb.normalsNeedUpdate,Oc=hb.tangentsNeedUpdate,fd=hb.colorsNeedUpdate,gd=hb.morphTargetsNeedUpdate,cc=hb.vertices,sa=ra.faces3,ta=ra.faces4,
-Za=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(Z=sa.length;F<Z;F++)U=Za[sa[F]],V=cc[U.a],W=cc[U.b],X=cc[U.c],Ta[Ma]=V.x,Ta[Ma+1]=V.y,Ta[Ma+2]=V.z,Ta[Ma+3]=W.x,Ta[Ma+4]=W.y,Ta[Ma+5]=W.z,Ta[Ma+6]=X.x,Ta[Ma+7]=X.y,Ta[Ma+8]=X.z,Ma+=9;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],V=cc[U.a],W=cc[U.b],X=cc[U.c],qa=cc[U.d],Ta[Ma]=V.x,Ta[Ma+1]=V.y,Ta[Ma+2]=V.z,Ta[Ma+3]=W.x,Ta[Ma+4]=W.y,Ta[Ma+5]=
-W.z,Ta[Ma+6]=X.x,Ta[Ma+7]=X.y,Ta[Ma+8]=X.z,Ta[Ma+9]=qa.x,Ta[Ma+10]=qa.y,Ta[Ma+11]=qa.z,Ma+=12;k.bindBuffer(k.ARRAY_BUFFER,ra.__webglVertexBuffer);k.bufferData(k.ARRAY_BUFFER,Ta,Aa)}if(gd){Sa=0;for(fc=bc.length;Sa<fc;Sa++){F=la=0;for(Z=sa.length;F<Z;F++)$b=sa[F],U=Za[$b],V=bc[Sa].vertices[U.a],W=bc[Sa].vertices[U.b],X=bc[Sa].vertices[U.c],Pa=Qc[Sa],Pa[la]=V.x,Pa[la+1]=V.y,Pa[la+2]=V.z,Pa[la+3]=W.x,Pa[la+4]=W.y,Pa[la+5]=W.z,Pa[la+6]=X.x,Pa[la+7]=X.y,Pa[la+8]=X.z,Va.morphNormals&&(fb?(Ub=yc[Sa].vertexNormals[$b],
-Hb=Ub.a,Ib=Ub.b,Jb=Ub.c):Jb=Ib=Hb=yc[Sa].faceNormals[$b],Qa=Rc[Sa],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(Z=ta.length;F<Z;F++)$b=ta[F],U=Za[$b],V=bc[Sa].vertices[U.a],W=bc[Sa].vertices[U.b],X=bc[Sa].vertices[U.c],qa=bc[Sa].vertices[U.d],Pa=Qc[Sa],Pa[la]=V.x,Pa[la+1]=V.y,Pa[la+2]=V.z,Pa[la+3]=W.x,Pa[la+4]=W.y,Pa[la+5]=W.z,Pa[la+6]=X.x,Pa[la+7]=X.y,Pa[la+8]=X.z,Pa[la+9]=qa.x,Pa[la+10]=qa.y,Pa[la+11]=
-qa.z,Va.morphNormals&&(fb?(Ub=yc[Sa].vertexNormals[$b],Hb=Ub.a,Ib=Ub.b,Jb=Ub.c,qb=Ub.d):qb=Jb=Ib=Hb=yc[Sa].faceNormals[$b],Qa=Rc[Sa],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,ra.__webglMorphTargetsBuffers[Sa]);k.bufferData(k.ARRAY_BUFFER,Qc[Sa],Aa);Va.morphNormals&&(k.bindBuffer(k.ARRAY_BUFFER,ra.__webglMorphNormalsBuffers[Sa]),k.bufferData(k.ARRAY_BUFFER,
-Rc[Sa],Aa))}}if(ac.length){F=0;for(Z=sa.length;F<Z;F++)U=Za[sa[F]],Nb=ac[U.a],Ob=ac[U.b],Pb=ac[U.c],Ga[ga]=Nb.x,Ga[ga+1]=Nb.y,Ga[ga+2]=Nb.z,Ga[ga+3]=Nb.w,Ga[ga+4]=Ob.x,Ga[ga+5]=Ob.y,Ga[ga+6]=Ob.z,Ga[ga+7]=Ob.w,Ga[ga+8]=Pb.x,Ga[ga+9]=Pb.y,Ga[ga+10]=Pb.z,Ga[ga+11]=Pb.w,Qb=dc[U.a],Rb=dc[U.b],Sb=dc[U.c],Fa[ga]=Qb.x,Fa[ga+1]=Qb.y,Fa[ga+2]=Qb.z,Fa[ga+3]=Qb.w,Fa[ga+4]=Rb.x,Fa[ga+5]=Rb.y,Fa[ga+6]=Rb.z,Fa[ga+7]=Rb.w,Fa[ga+8]=Sb.x,Fa[ga+9]=Sb.y,Fa[ga+10]=Sb.z,Fa[ga+11]=Sb.w,ga+=12;F=0;for(Z=ta.length;F<Z;F++)U=
-Za[ta[F]],Nb=ac[U.a],Ob=ac[U.b],Pb=ac[U.c],Bb=ac[U.d],Ga[ga]=Nb.x,Ga[ga+1]=Nb.y,Ga[ga+2]=Nb.z,Ga[ga+3]=Nb.w,Ga[ga+4]=Ob.x,Ga[ga+5]=Ob.y,Ga[ga+6]=Ob.z,Ga[ga+7]=Ob.w,Ga[ga+8]=Pb.x,Ga[ga+9]=Pb.y,Ga[ga+10]=Pb.z,Ga[ga+11]=Pb.w,Ga[ga+12]=Bb.x,Ga[ga+13]=Bb.y,Ga[ga+14]=Bb.z,Ga[ga+15]=Bb.w,Qb=dc[U.a],Rb=dc[U.b],Sb=dc[U.c],Cb=dc[U.d],Fa[ga]=Qb.x,Fa[ga+1]=Qb.y,Fa[ga+2]=Qb.z,Fa[ga+3]=Qb.w,Fa[ga+4]=Rb.x,Fa[ga+5]=Rb.y,Fa[ga+6]=Rb.z,Fa[ga+7]=Rb.w,Fa[ga+8]=Sb.x,Fa[ga+9]=Sb.y,Fa[ga+10]=Sb.z,Fa[ga+11]=Sb.w,Fa[ga+12]=
-Cb.x,Fa[ga+13]=Cb.y,Fa[ga+14]=Cb.z,Fa[ga+15]=Cb.w,ga+=16;0<ga&&(k.bindBuffer(k.ARRAY_BUFFER,ra.__webglSkinIndicesBuffer),k.bufferData(k.ARRAY_BUFFER,Fa,Aa),k.bindBuffer(k.ARRAY_BUFFER,ra.__webglSkinWeightsBuffer),k.bufferData(k.ARRAY_BUFFER,Ga,Aa))}if(fd&&gb){F=0;for(Z=sa.length;F<Z;F++)U=Za[sa[F]],Db=U.vertexColors,mb=U.color,3===Db.length&&gb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2]):Mb=Lb=Kb=mb,Ua[Ka]=Kb.r,Ua[Ka+1]=Kb.g,Ua[Ka+2]=Kb.b,Ua[Ka+3]=Lb.r,Ua[Ka+4]=Lb.g,Ua[Ka+5]=Lb.b,Ua[Ka+6]=Mb.r,
-Ua[Ka+7]=Mb.g,Ua[Ka+8]=Mb.b,Ka+=9;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],Db=U.vertexColors,mb=U.color,4===Db.length&&gb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2],yb=Db[3]):yb=Mb=Lb=Kb=mb,Ua[Ka]=Kb.r,Ua[Ka+1]=Kb.g,Ua[Ka+2]=Kb.b,Ua[Ka+3]=Lb.r,Ua[Ka+4]=Lb.g,Ua[Ka+5]=Lb.b,Ua[Ka+6]=Mb.r,Ua[Ka+7]=Mb.g,Ua[Ka+8]=Mb.b,Ua[Ka+9]=yb.r,Ua[Ka+10]=yb.g,Ua[Ka+11]=yb.b,Ka+=12;0<Ka&&(k.bindBuffer(k.ARRAY_BUFFER,ra.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Ua,Aa))}if(Oc&&hb.hasTangents){F=0;for(Z=sa.length;F<
-Z;F++)U=Za[sa[F]],bb=U.vertexTangents,Eb=bb[0],Fb=bb[1],Gb=bb[2],Ea[Ba]=Eb.x,Ea[Ba+1]=Eb.y,Ea[Ba+2]=Eb.z,Ea[Ba+3]=Eb.w,Ea[Ba+4]=Fb.x,Ea[Ba+5]=Fb.y,Ea[Ba+6]=Fb.z,Ea[Ba+7]=Fb.w,Ea[Ba+8]=Gb.x,Ea[Ba+9]=Gb.y,Ea[Ba+10]=Gb.z,Ea[Ba+11]=Gb.w,Ba+=12;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],bb=U.vertexTangents,Eb=bb[0],Fb=bb[1],Gb=bb[2],pb=bb[3],Ea[Ba]=Eb.x,Ea[Ba+1]=Eb.y,Ea[Ba+2]=Eb.z,Ea[Ba+3]=Eb.w,Ea[Ba+4]=Fb.x,Ea[Ba+5]=Fb.y,Ea[Ba+6]=Fb.z,Ea[Ba+7]=Fb.w,Ea[Ba+8]=Gb.x,Ea[Ba+9]=Gb.y,Ea[Ba+10]=Gb.z,Ea[Ba+11]=Gb.w,
-Ea[Ba+12]=pb.x,Ea[Ba+13]=pb.y,Ea[Ba+14]=pb.z,Ea[Ba+15]=pb.w,Ba+=16;k.bindBuffer(k.ARRAY_BUFFER,ra.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Ea,Aa)}if(Nc&&eb){F=0;for(Z=sa.length;F<Z;F++)if(U=Za[sa[F]],db=U.vertexNormals,ab=U.normal,3===db.length&&fb)for(va=0;3>va;va++)Zb=db[va],ub[Ya]=Zb.x,ub[Ya+1]=Zb.y,ub[Ya+2]=Zb.z,Ya+=3;else for(va=0;3>va;va++)ub[Ya]=ab.x,ub[Ya+1]=ab.y,ub[Ya+2]=ab.z,Ya+=3;F=0;for(Z=ta.length;F<Z;F++)if(U=Za[ta[F]],db=U.vertexNormals,ab=U.normal,4===db.length&&fb)for(va=
-0;4>va;va++)Zb=db[va],ub[Ya]=Zb.x,ub[Ya+1]=Zb.y,ub[Ya+2]=Zb.z,Ya+=3;else for(va=0;4>va;va++)ub[Ya]=ab.x,ub[Ya+1]=ab.y,ub[Ya+2]=ab.z,Ya+=3;k.bindBuffer(k.ARRAY_BUFFER,ra.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,ub,Aa)}if(mc&&Tc&&xb){F=0;for(Z=sa.length;F<Z;F++)if($a=sa[F],kb=Tc[$a],void 0!==kb)for(va=0;3>va;va++)ic=kb[va],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;F=0;for(Z=ta.length;F<Z;F++)if($a=ta[F],kb=Tc[$a],void 0!==kb)for(va=0;4>va;va++)ic=kb[va],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;0<Vb&&(k.bindBuffer(k.ARRAY_BUFFER,
-ra.__webglUVBuffer),k.bufferData(k.ARRAY_BUFFER,nc,Aa))}if(mc&&Uc&&xb){F=0;for(Z=sa.length;F<Z;F++)if($a=sa[F],lb=Uc[$a],void 0!==lb)for(va=0;3>va;va++)jc=lb[va],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;F=0;for(Z=ta.length;F<Z;F++)if($a=ta[F],lb=Uc[$a],void 0!==lb)for(va=0;4>va;va++)jc=lb[va],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;0<Wb&&(k.bindBuffer(k.ARRAY_BUFFER,ra.__webglUV2Buffer),k.bufferData(k.ARRAY_BUFFER,oc,Aa))}if(vc){F=0;for(Z=sa.length;F<Z;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(Z=ta.length;F<Z;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,ra.__webglFaceBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,Tb,Aa);k.bindBuffer(k.ELEMENT_ARRAY_BUFFER,ra.__webglLineBuffer);k.bufferData(k.ELEMENT_ARRAY_BUFFER,
-ob,Aa)}if(Sc){va=0;for(ec=Sc.length;va<ec;va++)if(x=Sc[va],x.__original.needsUpdate){y=0;if(1===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)U=Za[sa[F]],x.array[y]=x.value[U.a],x.array[y+1]=x.value[U.b],x.array[y+2]=x.value[U.c],y+=3;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],x.array[y]=x.value[U.a],x.array[y+1]=x.value[U.b],x.array[y+2]=x.value[U.c],x.array[y+3]=x.value[U.d],y+=4}else{if("faces"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)wa=x.value[sa[F]],x.array[y]=
-wa,x.array[y+1]=wa,x.array[y+2]=wa,y+=3;F=0;for(Z=ta.length;F<Z;F++)wa=x.value[ta[F]],x.array[y]=wa,x.array[y+1]=wa,x.array[y+2]=wa,x.array[y+3]=wa,y+=4}}else if(2===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)U=Za[sa[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,y+=6;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],qa=x.value[U.d],
-x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=qa.x,x.array[y+7]=qa.y,y+=8}else{if("faces"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)X=W=V=wa=x.value[sa[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,y+=6;F=0;for(Z=ta.length;F<Z;F++)qa=X=W=V=wa=x.value[ta[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=qa.x,x.array[y+
-7]=qa.y,y+=8}}else if(3===x.size){var fa;fa="c"===x.type?["r","g","b"]:["x","y","z"];if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)U=Za[sa[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],y+=9;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],
-qa=x.value[U.d],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],x.array[y+9]=qa[fa[0]],x.array[y+10]=qa[fa[1]],x.array[y+11]=qa[fa[2]],y+=12}else if("faces"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)X=W=V=wa=x.value[sa[F]],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+
-6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],y+=9;F=0;for(Z=ta.length;F<Z;F++)qa=X=W=V=wa=x.value[ta[F]],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],x.array[y+9]=qa[fa[0]],x.array[y+10]=qa[fa[1]],x.array[y+11]=qa[fa[2]],y+=12}else if("faceVertices"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)wa=x.value[sa[F]],V=wa[0],W=wa[1],X=wa[2],x.array[y]=
-V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],y+=9;F=0;for(Z=ta.length;F<Z;F++)wa=x.value[ta[F]],V=wa[0],W=wa[1],X=wa[2],qa=wa[3],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],x.array[y+9]=qa[fa[0]],x.array[y+10]=
-qa[fa[1]],x.array[y+11]=qa[fa[2]],y+=12}}else if(4===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)U=Za[sa[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,y+=12;F=0;for(Z=ta.length;F<Z;F++)U=Za[ta[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],qa=x.value[U.d],
-x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,x.array[y+12]=qa.x,x.array[y+13]=qa.y,x.array[y+14]=qa.z,x.array[y+15]=qa.w,y+=16}else if("faces"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)X=W=V=wa=x.value[sa[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,
-x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,y+=12;F=0;for(Z=ta.length;F<Z;F++)qa=X=W=V=wa=x.value[ta[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,x.array[y+12]=qa.x,x.array[y+13]=qa.y,x.array[y+14]=qa.z,x.array[y+15]=qa.w,y+=16}else if("faceVertices"===x.boundTo){F=0;for(Z=sa.length;F<Z;F++)wa=x.value[sa[F]],V=
-wa[0],W=wa[1],X=wa[2],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,y+=12;F=0;for(Z=ta.length;F<Z;F++)wa=x.value[ta[F]],V=wa[0],W=wa[1],X=wa[2],qa=wa[3],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+
-11]=X.w,x.array[y+12]=qa.x,x.array[y+13]=qa.y,x.array[y+14]=qa.z,x.array[y+15]=qa.w,y+=16}k.bindBuffer(k.ARRAY_BUFFER,x.buffer);k.bufferData(k.ARRAY_BUFFER,x.array,Aa)}}Ra&&(delete ra.__inittedArrays,delete ra.__colorArray,delete ra.__normalArray,delete ra.__tangentArray,delete ra.__uvArray,delete ra.__uv2Array,delete ra.__faceArray,delete ra.__vertexArray,delete ra.__lineArray,delete ra.__skinIndexArray,delete ra.__skinWeightArray)}}ca.verticesNeedUpdate=!1;ca.morphTargetsNeedUpdate=!1;ca.elementsNeedUpdate=
-!1;ca.uvsNeedUpdate=!1;ca.normalsNeedUpdate=!1;ca.colorsNeedUpdate=!1;ca.tangentsNeedUpdate=!1;ca.buffersNeedUpdate=!1;ka.attributes&&r(ka)}else if(pa instanceof THREE.Ribbon){ka=e(pa,ca);za=ka.attributes&&t(ka);if(ca.verticesNeedUpdate||ca.colorsNeedUpdate||ca.normalsNeedUpdate||za){var vb=ca,zc=k.DYNAMIC_DRAW,pc=void 0,qc=void 0,rc=void 0,Ac=void 0,xa=void 0,Bc=void 0,Cc=void 0,Dc=void 0,Xc=void 0,Wa=void 0,kc=void 0,Ca=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],xa=3*pc,Ec[xa]=Ac.x,Ec[xa+1]=Ac.y,Ec[xa+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],xa=3*qc,Fc[xa]=Bc.r,Fc[xa+1]=Bc.g,Fc[xa+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],xa=3*rc,Gc[xa]=Cc.x,Gc[xa+1]=Cc.y,Gc[xa+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(Ca=Vc[Dc],Ca.needsUpdate&&(void 0===Ca.boundTo||"vertices"===Ca.boundTo)){xa=0;kc=Ca.value.length;if(1===Ca.size)for(Wa=0;Wa<kc;Wa++)Ca.array[Wa]=Ca.value[Wa];else if(2===Ca.size)for(Wa=0;Wa<kc;Wa++)ib=Ca.value[Wa],Ca.array[xa]=ib.x,Ca.array[xa+1]=ib.y,xa+=2;else if(3===Ca.size)if("c"===
-Ca.type)for(Wa=0;Wa<kc;Wa++)ib=Ca.value[Wa],Ca.array[xa]=ib.r,Ca.array[xa+1]=ib.g,Ca.array[xa+2]=ib.b,xa+=3;else for(Wa=0;Wa<kc;Wa++)ib=Ca.value[Wa],Ca.array[xa]=ib.x,Ca.array[xa+1]=ib.y,Ca.array[xa+2]=ib.z,xa+=3;else if(4===Ca.size)for(Wa=0;Wa<kc;Wa++)ib=Ca.value[Wa],Ca.array[xa]=ib.x,Ca.array[xa+1]=ib.y,Ca.array[xa+2]=ib.z,Ca.array[xa+3]=ib.w,xa+=4;k.bindBuffer(k.ARRAY_BUFFER,Ca.buffer);k.bufferData(k.ARRAY_BUFFER,Ca.array,zc)}}}ca.verticesNeedUpdate=!1;ca.colorsNeedUpdate=!1;ca.normalsNeedUpdate=
-!1;ka.attributes&&r(ka)}else if(pa instanceof THREE.Line){ka=e(pa,ca);za=ka.attributes&&t(ka);if(ca.verticesNeedUpdate||ca.colorsNeedUpdate||ca.lineDistancesNeedUpdate||za){var wb=ca,Hc=k.DYNAMIC_DRAW,sc=void 0,tc=void 0,uc=void 0,Ic=void 0,Ha=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,Xa=void 0,lc=void 0,jb=void 0,Da=void 0;if(wb.verticesNeedUpdate){for(sc=0;sc<md;sc++)Ic=ad[sc],Ha=3*sc,Kc[Ha]=Ic.x,Kc[Ha+1]=Ic.y,Kc[Ha+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],Ha=3*tc,Lc[Ha]=Jc.r,Lc[Ha+1]=Jc.g,Lc[Ha+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(Da=Wc[Mc],Da.needsUpdate&&(void 0===Da.boundTo||"vertices"===Da.boundTo)){Ha=0;lc=Da.value.length;if(1===Da.size)for(Xa=0;Xa<lc;Xa++)Da.array[Xa]=Da.value[Xa];else if(2===Da.size)for(Xa=0;Xa<lc;Xa++)jb=Da.value[Xa],Da.array[Ha]=jb.x,Da.array[Ha+1]=jb.y,Ha+=2;else if(3===Da.size)if("c"===Da.type)for(Xa=0;Xa<lc;Xa++)jb=Da.value[Xa],Da.array[Ha]=jb.r,Da.array[Ha+1]=jb.g,Da.array[Ha+2]=jb.b,Ha+=3;else for(Xa=0;Xa<lc;Xa++)jb=
-Da.value[Xa],Da.array[Ha]=jb.x,Da.array[Ha+1]=jb.y,Da.array[Ha+2]=jb.z,Ha+=3;else if(4===Da.size)for(Xa=0;Xa<lc;Xa++)jb=Da.value[Xa],Da.array[Ha]=jb.x,Da.array[Ha+1]=jb.y,Da.array[Ha+2]=jb.z,Da.array[Ha+3]=jb.w,Ha+=4;k.bindBuffer(k.ARRAY_BUFFER,Da.buffer);k.bufferData(k.ARRAY_BUFFER,Da.array,Hc)}}}ca.verticesNeedUpdate=!1;ca.colorsNeedUpdate=!1;ca.lineDistancesNeedUpdate=!1;ka.attributes&&r(ka)}else pa instanceof THREE.ParticleSystem&&(ca instanceof THREE.BufferGeometry?((ca.verticesNeedUpdate||ca.colorsNeedUpdate)&&
-j(ca,k.DYNAMIC_DRAW,!ca.dynamic),ca.verticesNeedUpdate=!1,ca.colorsNeedUpdate=!1):(ka=e(pa,ca),za=ka.attributes&&t(ka),(ca.verticesNeedUpdate||ca.colorsNeedUpdate||pa.sortParticles||za)&&i(ca,k.DYNAMIC_DRAW,pa),ca.verticesNeedUpdate=!1,ca.colorsNeedUpdate=!1,ka.attributes&&r(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 wa=0,va=a.__webglObjects.length;wa<va;wa++){var ua=a.__webglObjects[wa].object,ca=ua.geometry,ta=void 0,Ca=void 0,ka=void 0;if(ua instanceof THREE.Mesh)if(ca instanceof THREE.BufferGeometry)(ca.verticesNeedUpdate||ca.elementsNeedUpdate||ca.uvsNeedUpdate||ca.normalsNeedUpdate||ca.colorsNeedUpdate||ca.tangentsNeedUpdate)&&j(ca,k.DYNAMIC_DRAW,!ca.dynamic),ca.verticesNeedUpdate=!1,ca.elementsNeedUpdate=!1,ca.uvsNeedUpdate=!1,ca.normalsNeedUpdate=!1,ca.colorsNeedUpdate=!1,ca.tangentsNeedUpdate=
+!1;else{for(var Ka=0,La=ca.geometryGroupsList.length;Ka<La;Ka++)if(ta=ca.geometryGroupsList[Ka],ka=e(ua,ta),ca.buffersNeedUpdate&&d(ta,ua),Ca=ka.attributes&&t(ka),ca.verticesNeedUpdate||ca.morphTargetsNeedUpdate||ca.elementsNeedUpdate||ca.uvsNeedUpdate||ca.normalsNeedUpdate||ca.colorsNeedUpdate||ca.tangentsNeedUpdate||Ca){var qa=ta,Na=ua,xa=k.DYNAMIC_DRAW,cb=!ca.dynamic,Ua=ka;if(qa.__inittedArrays){var eb=f(Ua),gb=Ua.vertexColors?Ua.vertexColors:!1,wb=g(Ua),fb=eb===THREE.SmoothShading,F=void 0,Z=
+void 0,Za=void 0,U=void 0,db=void 0,$a=void 0,Db=void 0,mb=void 0,ab=void 0,kb=void 0,lb=void 0,V=void 0,W=void 0,X=void 0,pa=void 0,Eb=void 0,Fb=void 0,Gb=void 0,ob=void 0,Hb=void 0,Ib=void 0,Jb=void 0,pb=void 0,Kb=void 0,Lb=void 0,Mb=void 0,xb=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,sb=0,Xa=0,Ba=0,bb=0,Ma=0,ga=0,la=0,y=0,
+za=void 0,Sa=qa.__vertexArray,nc=qa.__uvArray,oc=qa.__uv2Array,tb=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,nb=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,
+Ya=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(Z=ra.length;F<Z;F++)U=Ya[ra[F]],V=cc[U.a],W=cc[U.b],X=cc[U.c],Sa[Oa]=V.x,Sa[Oa+1]=V.y,Sa[Oa+2]=V.z,Sa[Oa+3]=W.x,Sa[Oa+4]=W.y,Sa[Oa+5]=W.z,Sa[Oa+6]=X.x,Sa[Oa+7]=X.y,Sa[Oa+8]=X.z,Oa+=9;F=0;for(Z=sa.length;F<Z;F++)U=Ya[sa[F]],V=cc[U.a],W=cc[U.b],X=cc[U.c],pa=cc[U.d],Sa[Oa]=V.x,Sa[Oa+1]=V.y,Sa[Oa+2]=V.z,Sa[Oa+3]=W.x,Sa[Oa+4]=W.y,Sa[Oa+5]=
+W.z,Sa[Oa+6]=X.x,Sa[Oa+7]=X.y,Sa[Oa+8]=X.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(Z=ra.length;F<Z;F++)$b=ra[F],U=Ya[$b],V=bc[Ra].vertices[U.a],W=bc[Ra].vertices[U.b],X=bc[Ra].vertices[U.c],Pa=Qc[Ra],Pa[la]=V.x,Pa[la+1]=V.y,Pa[la+2]=V.z,Pa[la+3]=W.x,Pa[la+4]=W.y,Pa[la+5]=W.z,Pa[la+6]=X.x,Pa[la+7]=X.y,Pa[la+8]=X.z,Ua.morphNormals&&(fb?(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(Z=sa.length;F<Z;F++)$b=sa[F],U=Ya[$b],V=bc[Ra].vertices[U.a],W=bc[Ra].vertices[U.b],X=bc[Ra].vertices[U.c],pa=bc[Ra].vertices[U.d],Pa=Qc[Ra],Pa[la]=V.x,Pa[la+1]=V.y,Pa[la+2]=V.z,Pa[la+3]=W.x,Pa[la+4]=W.y,Pa[la+5]=W.z,Pa[la+6]=X.x,Pa[la+7]=X.y,Pa[la+8]=X.z,Pa[la+9]=pa.x,Pa[la+10]=pa.y,Pa[la+11]=
+pa.z,Ua.morphNormals&&(fb?(Ub=yc[Ra].vertexNormals[$b],Hb=Ub.a,Ib=Ub.b,Jb=Ub.c,pb=Ub.d):pb=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]=pb.x,Qa[la+10]=pb.y,Qa[la+11]=pb.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(Z=ra.length;F<Z;F++)U=Ya[ra[F]],Nb=ac[U.a],Ob=ac[U.b],Pb=ac[U.c],Ha[ga]=Nb.x,Ha[ga+1]=Nb.y,Ha[ga+2]=Nb.z,Ha[ga+3]=Nb.w,Ha[ga+4]=Ob.x,Ha[ga+5]=Ob.y,Ha[ga+6]=Ob.z,Ha[ga+7]=Ob.w,Ha[ga+8]=Pb.x,Ha[ga+9]=Pb.y,Ha[ga+10]=Pb.z,Ha[ga+11]=Pb.w,Qb=dc[U.a],Rb=dc[U.b],Sb=dc[U.c],Ga[ga]=Qb.x,Ga[ga+1]=Qb.y,Ga[ga+2]=Qb.z,Ga[ga+3]=Qb.w,Ga[ga+4]=Rb.x,Ga[ga+5]=Rb.y,Ga[ga+6]=Rb.z,Ga[ga+7]=Rb.w,Ga[ga+8]=Sb.x,Ga[ga+9]=Sb.y,Ga[ga+10]=Sb.z,Ga[ga+11]=Sb.w,ga+=12;F=0;for(Z=sa.length;F<Z;F++)U=
+Ya[sa[F]],Nb=ac[U.a],Ob=ac[U.b],Pb=ac[U.c],Ab=ac[U.d],Ha[ga]=Nb.x,Ha[ga+1]=Nb.y,Ha[ga+2]=Nb.z,Ha[ga+3]=Nb.w,Ha[ga+4]=Ob.x,Ha[ga+5]=Ob.y,Ha[ga+6]=Ob.z,Ha[ga+7]=Ob.w,Ha[ga+8]=Pb.x,Ha[ga+9]=Pb.y,Ha[ga+10]=Pb.z,Ha[ga+11]=Pb.w,Ha[ga+12]=Ab.x,Ha[ga+13]=Ab.y,Ha[ga+14]=Ab.z,Ha[ga+15]=Ab.w,Qb=dc[U.a],Rb=dc[U.b],Sb=dc[U.c],Bb=dc[U.d],Ga[ga]=Qb.x,Ga[ga+1]=Qb.y,Ga[ga+2]=Qb.z,Ga[ga+3]=Qb.w,Ga[ga+4]=Rb.x,Ga[ga+5]=Rb.y,Ga[ga+6]=Rb.z,Ga[ga+7]=Rb.w,Ga[ga+8]=Sb.x,Ga[ga+9]=Sb.y,Ga[ga+10]=Sb.z,Ga[ga+11]=Sb.w,Ga[ga+12]=
+Bb.x,Ga[ga+13]=Bb.y,Ga[ga+14]=Bb.z,Ga[ga+15]=Bb.w,ga+=16;0<ga&&(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&&gb){F=0;for(Z=ra.length;F<Z;F++)U=Ya[ra[F]],Db=U.vertexColors,mb=U.color,3===Db.length&&gb===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(Z=sa.length;F<Z;F++)U=Ya[sa[F]],Db=U.vertexColors,mb=U.color,4===Db.length&&gb===THREE.VertexColors?(Kb=Db[0],Lb=Db[1],Mb=Db[2],xb=Db[3]):xb=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]=xb.r,Ta[Ma+10]=xb.g,Ta[Ma+11]=xb.b,Ma+=12;0<Ma&&(k.bindBuffer(k.ARRAY_BUFFER,qa.__webglColorBuffer),k.bufferData(k.ARRAY_BUFFER,Ta,xa))}if(Oc&&hb.hasTangents){F=0;for(Z=ra.length;F<
+Z;F++)U=Ya[ra[F]],ab=U.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(Z=sa.length;F<Z;F++)U=Ya[sa[F]],ab=U.vertexTangents,Eb=ab[0],Fb=ab[1],Gb=ab[2],ob=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]=ob.x,Fa[Ba+13]=ob.y,Fa[Ba+14]=ob.z,Fa[Ba+15]=ob.w,Ba+=16;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglTangentBuffer);k.bufferData(k.ARRAY_BUFFER,Fa,xa)}if(Nc&&eb){F=0;for(Z=ra.length;F<Z;F++)if(U=Ya[ra[F]],db=U.vertexNormals,$a=U.normal,3===db.length&&fb)for(ya=0;3>ya;ya++)Zb=db[ya],tb[Xa]=Zb.x,tb[Xa+1]=Zb.y,tb[Xa+2]=Zb.z,Xa+=3;else for(ya=0;3>ya;ya++)tb[Xa]=$a.x,tb[Xa+1]=$a.y,tb[Xa+2]=$a.z,Xa+=3;F=0;for(Z=sa.length;F<Z;F++)if(U=Ya[sa[F]],db=U.vertexNormals,$a=U.normal,4===db.length&&fb)for(ya=
+0;4>ya;ya++)Zb=db[ya],tb[Xa]=Zb.x,tb[Xa+1]=Zb.y,tb[Xa+2]=Zb.z,Xa+=3;else for(ya=0;4>ya;ya++)tb[Xa]=$a.x,tb[Xa+1]=$a.y,tb[Xa+2]=$a.z,Xa+=3;k.bindBuffer(k.ARRAY_BUFFER,qa.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,tb,xa)}if(mc&&Tc&&wb){F=0;for(Z=ra.length;F<Z;F++)if(Za=ra[F],kb=Tc[Za],void 0!==kb)for(ya=0;3>ya;ya++)ic=kb[ya],nc[Vb]=ic.u,nc[Vb+1]=ic.v,Vb+=2;F=0;for(Z=sa.length;F<Z;F++)if(Za=sa[F],kb=Tc[Za],void 0!==kb)for(ya=0;4>ya;ya++)ic=kb[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&&wb){F=0;for(Z=ra.length;F<Z;F++)if(Za=ra[F],lb=Uc[Za],void 0!==lb)for(ya=0;3>ya;ya++)jc=lb[ya],oc[Wb]=jc.u,oc[Wb+1]=jc.v,Wb+=2;F=0;for(Z=sa.length;F<Z;F++)if(Za=sa[F],lb=Uc[Za],void 0!==lb)for(ya=0;4>ya;ya++)jc=lb[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(Z=ra.length;F<Z;F++)Tb[sb]=Ja,Tb[sb+1]=Ja+1,Tb[sb+2]=Ja+2,sb+=3,nb[bb]=Ja,nb[bb+
+1]=Ja+1,nb[bb+2]=Ja,nb[bb+3]=Ja+2,nb[bb+4]=Ja+1,nb[bb+5]=Ja+2,bb+=6,Ja+=3;F=0;for(Z=sa.length;F<Z;F++)Tb[sb]=Ja,Tb[sb+1]=Ja+1,Tb[sb+2]=Ja+3,Tb[sb+3]=Ja+1,Tb[sb+4]=Ja+2,Tb[sb+5]=Ja+3,sb+=6,nb[bb]=Ja,nb[bb+1]=Ja+1,nb[bb+2]=Ja,nb[bb+3]=Ja+3,nb[bb+4]=Ja+1,nb[bb+5]=Ja+2,nb[bb+6]=Ja+2,nb[bb+7]=Ja+3,bb+=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,
+nb,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(Z=ra.length;F<Z;F++)U=Ya[ra[F]],x.array[y]=x.value[U.a],x.array[y+1]=x.value[U.b],x.array[y+2]=x.value[U.c],y+=3;F=0;for(Z=sa.length;F<Z;F++)U=Ya[sa[F]],x.array[y]=x.value[U.a],x.array[y+1]=x.value[U.b],x.array[y+2]=x.value[U.c],x.array[y+3]=x.value[U.d],y+=4}else{if("faces"===x.boundTo){F=0;for(Z=ra.length;F<Z;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(Z=sa.length;F<Z;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(Z=ra.length;F<Z;F++)U=Ya[ra[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,y+=6;F=0;for(Z=sa.length;F<Z;F++)U=Ya[sa[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],pa=x.value[U.d],
+x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=pa.x,x.array[y+7]=pa.y,y+=8}else{if("faces"===x.boundTo){F=0;for(Z=ra.length;F<Z;F++)X=W=V=za=x.value[ra[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,y+=6;F=0;for(Z=sa.length;F<Z;F++)pa=X=W=V=za=x.value[sa[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=W.x,x.array[y+3]=W.y,x.array[y+4]=X.x,x.array[y+5]=X.y,x.array[y+6]=pa.x,x.array[y+
+7]=pa.y,y+=8}}else if(3===x.size){var fa;fa="c"===x.type?["r","g","b"]:["x","y","z"];if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for(Z=ra.length;F<Z;F++)U=Ya[ra[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],y+=9;F=0;for(Z=sa.length;F<Z;F++)U=Ya[sa[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],
+pa=x.value[U.d],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],x.array[y+9]=pa[fa[0]],x.array[y+10]=pa[fa[1]],x.array[y+11]=pa[fa[2]],y+=12}else if("faces"===x.boundTo){F=0;for(Z=ra.length;F<Z;F++)X=W=V=za=x.value[ra[F]],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+
+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],y+=9;F=0;for(Z=sa.length;F<Z;F++)pa=X=W=V=za=x.value[sa[F]],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],x.array[y+9]=pa[fa[0]],x.array[y+10]=pa[fa[1]],x.array[y+11]=pa[fa[2]],y+=12}else if("faceVertices"===x.boundTo){F=0;for(Z=ra.length;F<Z;F++)za=x.value[ra[F]],V=za[0],W=za[1],X=za[2],x.array[y]=
+V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],y+=9;F=0;for(Z=sa.length;F<Z;F++)za=x.value[sa[F]],V=za[0],W=za[1],X=za[2],pa=za[3],x.array[y]=V[fa[0]],x.array[y+1]=V[fa[1]],x.array[y+2]=V[fa[2]],x.array[y+3]=W[fa[0]],x.array[y+4]=W[fa[1]],x.array[y+5]=W[fa[2]],x.array[y+6]=X[fa[0]],x.array[y+7]=X[fa[1]],x.array[y+8]=X[fa[2]],x.array[y+9]=pa[fa[0]],x.array[y+10]=
+pa[fa[1]],x.array[y+11]=pa[fa[2]],y+=12}}else if(4===x.size)if(void 0===x.boundTo||"vertices"===x.boundTo){F=0;for(Z=ra.length;F<Z;F++)U=Ya[ra[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,y+=12;F=0;for(Z=sa.length;F<Z;F++)U=Ya[sa[F]],V=x.value[U.a],W=x.value[U.b],X=x.value[U.c],pa=x.value[U.d],
+x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.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(Z=ra.length;F<Z;F++)X=W=V=za=x.value[ra[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,
+x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,y+=12;F=0;for(Z=sa.length;F<Z;F++)pa=X=W=V=za=x.value[sa[F]],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.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(Z=ra.length;F<Z;F++)za=x.value[ra[F]],V=
+za[0],W=za[1],X=za[2],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+11]=X.w,y+=12;F=0;for(Z=sa.length;F<Z;F++)za=x.value[sa[F]],V=za[0],W=za[1],X=za[2],pa=za[3],x.array[y]=V.x,x.array[y+1]=V.y,x.array[y+2]=V.z,x.array[y+3]=V.w,x.array[y+4]=W.x,x.array[y+5]=W.y,x.array[y+6]=W.z,x.array[y+7]=W.w,x.array[y+8]=X.x,x.array[y+9]=X.y,x.array[y+10]=X.z,x.array[y+
+11]=X.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)}}cb&&(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)}}ca.verticesNeedUpdate=!1;ca.morphTargetsNeedUpdate=!1;ca.elementsNeedUpdate=
+!1;ca.uvsNeedUpdate=!1;ca.normalsNeedUpdate=!1;ca.colorsNeedUpdate=!1;ca.tangentsNeedUpdate=!1;ca.buffersNeedUpdate=!1;ka.attributes&&r(ka)}else if(ua instanceof THREE.Ribbon){ka=e(ua,ca);Ca=ka.attributes&&t(ka);if(ca.verticesNeedUpdate||ca.colorsNeedUpdate||ca.normalsNeedUpdate||Ca){var ub=ca,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,ib=void 0,Yc=ub.vertices,Zc=ub.colors,$c=ub.normals,hd=Yc.length,id=
+Zc.length,jd=$c.length,Ec=ub.__vertexArray,Fc=ub.__colorArray,Gc=ub.__normalArray,kd=ub.colorsNeedUpdate,ld=ub.normalsNeedUpdate,Vc=ub.__webglCustomAttributesList;if(ub.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,ub.__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,ub.__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,ub.__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++)ib=Da.value[Va],Da.array[Aa]=ib.x,Da.array[Aa+1]=ib.y,Aa+=2;else if(3===Da.size)if("c"===
+Da.type)for(Va=0;Va<kc;Va++)ib=Da.value[Va],Da.array[Aa]=ib.r,Da.array[Aa+1]=ib.g,Da.array[Aa+2]=ib.b,Aa+=3;else for(Va=0;Va<kc;Va++)ib=Da.value[Va],Da.array[Aa]=ib.x,Da.array[Aa+1]=ib.y,Da.array[Aa+2]=ib.z,Aa+=3;else if(4===Da.size)for(Va=0;Va<kc;Va++)ib=Da.value[Va],Da.array[Aa]=ib.x,Da.array[Aa+1]=ib.y,Da.array[Aa+2]=ib.z,Da.array[Aa+3]=ib.w,Aa+=4;k.bindBuffer(k.ARRAY_BUFFER,Da.buffer);k.bufferData(k.ARRAY_BUFFER,Da.array,zc)}}}ca.verticesNeedUpdate=!1;ca.colorsNeedUpdate=!1;ca.normalsNeedUpdate=
+!1;ka.attributes&&r(ka)}else if(ua instanceof THREE.Line){ka=e(ua,ca);Ca=ka.attributes&&t(ka);if(ca.verticesNeedUpdate||ca.colorsNeedUpdate||ca.lineDistancesNeedUpdate||Ca){var vb=ca,Hc=k.DYNAMIC_DRAW,sc=void 0,tc=void 0,uc=void 0,Ic=void 0,Ia=void 0,Jc=void 0,ad=vb.vertices,bd=vb.colors,cd=vb.lineDistances,md=ad.length,nd=bd.length,od=cd.length,Kc=vb.__vertexArray,Lc=vb.__colorArray,dd=vb.__lineDistanceArray,pd=vb.colorsNeedUpdate,qd=vb.lineDistancesNeedUpdate,Wc=vb.__webglCustomAttributesList,Mc=
+void 0,ed=void 0,Wa=void 0,lc=void 0,jb=void 0,Ea=void 0;if(vb.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,vb.__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,vb.__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,vb.__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++)jb=Ea.value[Wa],Ea.array[Ia]=jb.x,Ea.array[Ia+1]=jb.y,Ia+=2;else if(3===Ea.size)if("c"===Ea.type)for(Wa=0;Wa<lc;Wa++)jb=Ea.value[Wa],Ea.array[Ia]=jb.r,Ea.array[Ia+1]=jb.g,Ea.array[Ia+2]=jb.b,Ia+=3;else for(Wa=0;Wa<lc;Wa++)jb=
+Ea.value[Wa],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(Wa=0;Wa<lc;Wa++)jb=Ea.value[Wa],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)}}}ca.verticesNeedUpdate=!1;ca.colorsNeedUpdate=!1;ca.lineDistancesNeedUpdate=!1;ka.attributes&&r(ka)}else ua instanceof THREE.ParticleSystem&&(ca instanceof THREE.BufferGeometry?((ca.verticesNeedUpdate||ca.colorsNeedUpdate)&&
+j(ca,k.DYNAMIC_DRAW,!ca.dynamic),ca.verticesNeedUpdate=!1,ca.colorsNeedUpdate=!1):(ka=e(ua,ca),Ca=ka.attributes&&t(ka),(ca.verticesNeedUpdate||ca.colorsNeedUpdate||ua.sortParticles||Ca)&&i(ca,k.DYNAMIC_DRAW,ua),ca.verticesNeedUpdate=!1,ca.colorsNeedUpdate=!1,ka.attributes&&r(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,q,r;e=p=q=r=o=0;for(f=b.length;e<f;e++)g=b[e],g.onlyShadow||(g instanceof THREE.DirectionalLight&&p++,g instanceof THREE.PointLight&&
 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,q,r;e=p=q=r=o=0;for(f=b.length;e<f;e++)g=b[e],g.onlyShadow||(g instanceof THREE.DirectionalLight&&p++,g instanceof THREE.PointLight&&
 q++,g instanceof THREE.SpotLight&&r++,g instanceof THREE.HemisphereLight&&o++);e=p;f=q;g=r;h=o;o=p=0;for(r=b.length;o<r;o++)q=b[o],q.castShadow&&(q instanceof THREE.SpotLight&&p++,q instanceof THREE.DirectionalLight&&!q.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+
 q++,g instanceof THREE.SpotLight&&r++,g instanceof THREE.HemisphereLight&&o++);e=p;f=q;g=r;h=o;o=p=0;for(r=b.length;o<r;o++)q=b[o],q.castShadow&&(q instanceof THREE.SpotLight&&p++,q instanceof THREE.DirectionalLight&&!q.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:{q=a.fragmentShader;r=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,
 ", this GPU supports just "+b+" (try OpenGL instead of ANGLE)")),l=b);var t;a:{q=a.fragmentShader;r=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,
@@ -490,15 +490,15 @@ c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp?"#define FOG_EXP2":"",c.
 ", gl error ["+k.getError()+"]");k.deleteShader(u);k.deleteShader(s);v.uniforms={};v.attributes={};var w;s="viewMatrix modelViewMatrix projectionMatrix normalMatrix modelMatrix cameraPosition morphTargetInfluences".split(" ");c.useVertexTexture?s.push("boneTexture"):s.push("boneGlobalMatrices");for(w in o)s.push(w);w=s;s=0;for(u=w.length;s<u;s++)d=w[s],v.uniforms[d]=k.getUniformLocation(v,d);s="position normal uv uv2 tangent color skinIndex skinWeight lineDistance".split(" ");for(w=0;w<c.maxMorphTargets;w++)s.push("morphTarget"+
 ", gl error ["+k.getError()+"]");k.deleteShader(u);k.deleteShader(s);v.uniforms={};v.attributes={};var w;s="viewMatrix modelViewMatrix projectionMatrix normalMatrix modelMatrix cameraPosition morphTargetInfluences".split(" ");c.useVertexTexture?s.push("boneTexture"):s.push("boneGlobalMatrices");for(w in o)s.push(w);w=s;s=0;for(u=w.length;s<u;s++)d=w[s],v.uniforms[d]=k.getUniformLocation(v,d);s="position normal uv uv2 tangent color skinIndex skinWeight lineDistance".split(" ");for(w=0;w<c.maxMorphTargets;w++)s.push("morphTarget"+
 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=Q++;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);
 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=Q++;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+
 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;Na!==b&&(b?k.disable(k.CULL_FACE):
-k.enable(k.CULL_FACE),Na=b);za!==a&&(a?k.frontFace(k.CW):k.frontFace(k.CCW),za=a)};this.setDepthTest=function(a){Va!==a&&(a?k.enable(k.DEPTH_TEST):k.disable(k.DEPTH_TEST),Va=a)};this.setDepthWrite=function(a){fb!==a&&(k.depthMask(a),fb=a)};this.setBlending=function(a,b,c,d){a!==Oa&&(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)),Oa=a);if(a===THREE.CustomBlending){if(b!==Aa&&(k.blendEquation(H(b)),Aa=b),c!==pa||d!==xb)k.blendFunc(H(c),H(d)),pa=c,xb=d}else xb=pa=Aa=null};this.setTexture=
+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){fb!==a&&(k.depthMask(a),fb=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!==cb||d!==wb)k.blendFunc(H(c),H(d)),cb=c,wb=d}else wb=cb=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);L(k.TEXTURE_2D,a,d);if(a instanceof THREE.CompressedTexture)for(var f=a.mipmaps,g=0,h=f.length;g<
 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);L(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===
 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);L(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.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);L(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),L(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,
 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),L(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=lb,a=La,d=Ra,e=Ia);b!==da&&(k.bindFramebuffer(k.FRAMEBUFFER,
-b),k.viewport(d,e,c,a),da=b);$a=c;db=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=xa,e=La);b!==da&&(k.bindFramebuffer(k.FRAMEBUFFER,
+b),k.viewport(d,e,c,a),da=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.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.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};
 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};
@@ -760,8 +760,8 @@ new THREE.PerspectiveCamera(o.shadowCameraFov,o.shadowMapWidth/o.shadowMapHeight
 new THREE.CameraHelper(o.shadowCamera),o.shadowCamera.add(o.cameraHelper));if(o.isVirtual&&z.originalCamera==n){t=n;q=o.shadowCamera;r=o.pointsFrustum;s=o.pointsWorld;i.set(Infinity,Infinity,Infinity);j.set(-Infinity,-Infinity,-Infinity);for(A=0;8>A;A++)if(u=s[A],u.copy(r[A]),THREE.ShadowMapPlugin.__projector.unprojectVector(u,t),q.matrixWorldInverse.multiplyVector3(u),u.x<i.x&&(i.x=u.x),u.x>j.x&&(j.x=u.x),u.y<i.y&&(i.y=u.y),u.y>j.y&&(j.y=u.y),u.z<i.z&&(i.z=u.z),u.z>j.z)j.z=u.z;q.left=i.x;q.right=
 new THREE.CameraHelper(o.shadowCamera),o.shadowCamera.add(o.cameraHelper));if(o.isVirtual&&z.originalCamera==n){t=n;q=o.shadowCamera;r=o.pointsFrustum;s=o.pointsWorld;i.set(Infinity,Infinity,Infinity);j.set(-Infinity,-Infinity,-Infinity);for(A=0;8>A;A++)if(u=s[A],u.copy(r[A]),THREE.ShadowMapPlugin.__projector.unprojectVector(u,t),q.matrixWorldInverse.multiplyVector3(u),u.x<i.x&&(i.x=u.x),u.x>j.x&&(j.x=u.x),u.y<i.y&&(i.y=u.y),u.y>j.y&&(j.y=u.y),u.z<i.z&&(i.z=u.z),u.z>j.z)j.z=u.z;q.left=i.x;q.right=
 j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=o.shadowMap;r=o.shadowMatrix;t=o.shadowCamera;t.position.copy(o.matrixWorld.getPosition());t.lookAt(o.target.matrixWorld.getPosition());t.updateMatrixWorld();t.matrixWorldInverse.getInverse(t.matrixWorld);o.cameraHelper&&(o.cameraHelper.visible=o.shadowCameraVisible);o.shadowCameraVisible&&o.cameraHelper.update();r.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);r.multiplySelf(t.projectionMatrix);r.multiplySelf(t.matrixWorldInverse);t._viewMatrixArray||
 j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=o.shadowMap;r=o.shadowMatrix;t=o.shadowCamera;t.position.copy(o.matrixWorld.getPosition());t.lookAt(o.target.matrixWorld.getPosition());t.updateMatrixWorld();t.matrixWorldInverse.getInverse(t.matrixWorld);o.cameraHelper&&(o.cameraHelper.visible=o.shadowCameraVisible);o.shadowCameraVisible&&o.cameraHelper.update();r.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);r.multiplySelf(t.projectionMatrix);r.multiplySelf(t.matrixWorldInverse);t._viewMatrixArray||
 (t._viewMatrixArray=new Float32Array(16));t._projectionMatrixArray||(t._projectionMatrixArray=new Float32Array(16));t.matrixWorldInverse.flattenToArray(t._viewMatrixArray);t.projectionMatrix.flattenToArray(t._projectionMatrixArray);h.multiply(t.projectionMatrix,t.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();s=l.__webglObjects;o=0;for(q=s.length;o<q;o++)if(A=s[o],r=A.object,A.render=!1,r.visible&&r.castShadow&&(!(r instanceof THREE.Mesh||r instanceof THREE.ParticleSystem)||
 (t._viewMatrixArray=new Float32Array(16));t._projectionMatrixArray||(t._projectionMatrixArray=new Float32Array(16));t.matrixWorldInverse.flattenToArray(t._viewMatrixArray);t.projectionMatrix.flattenToArray(t._projectionMatrixArray);h.multiply(t.projectionMatrix,t.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();s=l.__webglObjects;o=0;for(q=s.length;o<q;o++)if(A=s[o],r=A.object,A.render=!1,r.visible&&r.castShadow&&(!(r instanceof THREE.Mesh||r instanceof THREE.ParticleSystem)||
-!r.frustumCulled||g.contains(r)))r._modelViewMatrix.multiply(t.matrixWorldInverse,r.matrixWorld),A.render=!0;o=0;for(q=s.length;o<q;o++)A=s[o],A.render&&(r=A.object,A=A.buffer,w=r.material instanceof THREE.MeshFaceMaterial?r.geometry.materials[0]:r.material,u=0<r.geometry.morphTargets.length&&w.morphTargets,w=r instanceof THREE.SkinnedMesh&&w.skinning,u=r.customDepthMaterial?r.customDepthMaterial:w?u?f:e:u?d:c,A instanceof THREE.BufferGeometry?b.renderBufferDirect(t,l.__lights,null,u,A,r):b.renderBuffer(t,
-l.__lights,null,u,A,r));s=l.__webglObjectsImmediate;o=0;for(q=s.length;o<q;o++)A=s[o],r=A.object,r.visible&&r.castShadow&&(r._modelViewMatrix.multiply(t.matrixWorldInverse,r.matrixWorld),b.renderImmediateObject(t,l.__lights,null,c,r))}m=b.getClearColor();p=b.getClearAlpha();a.clearColor(m.r,m.g,m.b,p);a.enable(a.BLEND);b.shadowMapCullFrontFaces&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;
+!r.frustumCulled||g.contains(r)))r._modelViewMatrix.multiply(t.matrixWorldInverse,r.matrixWorld),A.render=!0;o=0;for(q=s.length;o<q;o++)A=s[o],A.render&&(r=A.object,A=A.buffer,w=r.material instanceof THREE.MeshFaceMaterial?0<r.material.materials.length?r.material.materials[0]:r.geometry.materials[0]:r.material,u=0<r.geometry.morphTargets.length&&w.morphTargets,w=r instanceof THREE.SkinnedMesh&&w.skinning,u=r.customDepthMaterial?r.customDepthMaterial:w?u?f:e:u?d:c,A instanceof THREE.BufferGeometry?
+b.renderBufferDirect(t,l.__lights,null,u,A,r):b.renderBuffer(t,l.__lights,null,u,A,r));s=l.__webglObjectsImmediate;o=0;for(q=s.length;o<q;o++)A=s[o],r=A.object,r.visible&&r.castShadow&&(r._modelViewMatrix.multiply(t.matrixWorldInverse,r.matrixWorld),b.renderImmediateObject(t,l.__lights,null,c,r))}m=b.getClearColor();p=b.getClearAlpha();a.clearColor(m.r,m.g,m.b,p);a.enable(a.BLEND);b.shadowMapCullFrontFaces&&a.cullFace(a.BACK)}};THREE.ShadowMapPlugin.__projector=new THREE.Projector;
 THREE.SpritePlugin=function(){function a(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var b,c,d,e,f,g,h,i,j,l;this.init=function(a){b=a.context;c=a;d=new Float32Array(16);e=new Uint16Array(6);a=0;d[a++]=-1;d[a++]=-1;d[a++]=0;d[a++]=0;d[a++]=1;d[a++]=-1;d[a++]=1;d[a++]=0;d[a++]=1;d[a++]=1;d[a++]=1;d[a++]=1;d[a++]=-1;d[a++]=1;d[a++]=0;d[a++]=1;a=0;e[a++]=0;e[a++]=1;e[a++]=2;e[a++]=0;e[a++]=2;e[a++]=3;f=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,f);b.bufferData(b.ARRAY_BUFFER,d,b.STATIC_DRAW);
 THREE.SpritePlugin=function(){function a(a,b){return a.z!==b.z?b.z-a.z:b.id-a.id}var b,c,d,e,f,g,h,i,j,l;this.init=function(a){b=a.context;c=a;d=new Float32Array(16);e=new Uint16Array(6);a=0;d[a++]=-1;d[a++]=-1;d[a++]=0;d[a++]=0;d[a++]=1;d[a++]=-1;d[a++]=1;d[a++]=0;d[a++]=1;d[a++]=1;d[a++]=1;d[a++]=1;d[a++]=-1;d[a++]=1;d[a++]=0;d[a++]=1;a=0;e[a++]=0;e[a++]=1;e[a++]=2;e[a++]=0;e[a++]=2;e[a++]=3;f=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,f);b.bufferData(b.ARRAY_BUFFER,d,b.STATIC_DRAW);
 b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,e,b.STATIC_DRAW);var a=THREE.ShaderSprite.sprite,m=b.createProgram(),p=b.createShader(b.FRAGMENT_SHADER),o=b.createShader(b.VERTEX_SHADER);b.shaderSource(p,a.fragmentShader);b.shaderSource(o,a.vertexShader);b.compileShader(p);b.compileShader(o);b.attachShader(m,p);b.attachShader(m,o);b.linkProgram(m);h=m;i={};j={};i.position=b.getAttribLocation(h,"position");i.uv=b.getAttribLocation(h,"uv");j.uvOffset=b.getUniformLocation(h,
 b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,e,b.STATIC_DRAW);var a=THREE.ShaderSprite.sprite,m=b.createProgram(),p=b.createShader(b.FRAGMENT_SHADER),o=b.createShader(b.VERTEX_SHADER);b.shaderSource(p,a.fragmentShader);b.shaderSource(o,a.vertexShader);b.compileShader(p);b.compileShader(o);b.attachShader(m,p);b.attachShader(m,o);b.linkProgram(m);h=m;i={};j={};i.position=b.getAttribLocation(h,"position");i.uv=b.getAttribLocation(h,"uv");j.uvOffset=b.getUniformLocation(h,
 "uvOffset");j.uvScale=b.getUniformLocation(h,"uvScale");j.rotation=b.getUniformLocation(h,"rotation");j.scale=b.getUniformLocation(h,"scale");j.alignment=b.getUniformLocation(h,"alignment");j.color=b.getUniformLocation(h,"color");j.map=b.getUniformLocation(h,"map");j.opacity=b.getUniformLocation(h,"opacity");j.useScreenCoordinates=b.getUniformLocation(h,"useScreenCoordinates");j.affectedByDistance=b.getUniformLocation(h,"affectedByDistance");j.screenPosition=b.getUniformLocation(h,"screenPosition");
 "uvOffset");j.uvScale=b.getUniformLocation(h,"uvScale");j.rotation=b.getUniformLocation(h,"rotation");j.scale=b.getUniformLocation(h,"scale");j.alignment=b.getUniformLocation(h,"alignment");j.color=b.getUniformLocation(h,"color");j.map=b.getUniformLocation(h,"map");j.opacity=b.getUniformLocation(h,"opacity");j.useScreenCoordinates=b.getUniformLocation(h,"useScreenCoordinates");j.affectedByDistance=b.getUniformLocation(h,"affectedByDistance");j.screenPosition=b.getUniformLocation(h,"screenPosition");
@@ -774,8 +774,8 @@ b.depthMask(!0)}}};
 THREE.DepthPassPlugin=function(){this.enabled=!1;this.renderTarget=null;var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,
 THREE.DepthPassPlugin=function(){this.enabled=!1;this.renderTarget=null;var a,b,c,d,e,f,g=new THREE.Frustum,h=new THREE.Matrix4;this.init=function(g){a=g.context;b=g;var g=THREE.ShaderLib.depthRGBA,h=THREE.UniformsUtils.clone(g.uniforms);c=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h});d=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0});e=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,
 uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,b){this.enabled&&this.update(a,b)};this.update=function(i,j){var l,n,m,p,o,q;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);b.autoUpdateScene&&i.updateMatrixWorld();j._viewMatrixArray||(j._viewMatrixArray=new Float32Array(16));j._projectionMatrixArray||
 uniforms:h,skinning:!0});f=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:h,morphTargets:!0,skinning:!0});c._shadowPass=!0;d._shadowPass=!0;e._shadowPass=!0;f._shadowPass=!0};this.render=function(a,b){this.enabled&&this.update(a,b)};this.update=function(i,j){var l,n,m,p,o,q;a.clearColor(1,1,1,1);a.disable(a.BLEND);b.setDepthTest(!0);b.autoUpdateScene&&i.updateMatrixWorld();j._viewMatrixArray||(j._viewMatrixArray=new Float32Array(16));j._projectionMatrixArray||
 (j._projectionMatrixArray=new Float32Array(16));j.matrixWorldInverse.getInverse(j.matrixWorld);j.matrixWorldInverse.flattenToArray(j._viewMatrixArray);j.projectionMatrix.flattenToArray(j._projectionMatrixArray);h.multiply(j.projectionMatrix,j.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(this.renderTarget);b.clear();q=i.__webglObjects;l=0;for(n=q.length;l<n;l++)if(m=q[l],o=m.object,m.render=!1,o.visible&&(!(o instanceof THREE.Mesh||o instanceof THREE.ParticleSystem)||!o.frustumCulled||
 (j._projectionMatrixArray=new Float32Array(16));j.matrixWorldInverse.getInverse(j.matrixWorld);j.matrixWorldInverse.flattenToArray(j._viewMatrixArray);j.projectionMatrix.flattenToArray(j._projectionMatrixArray);h.multiply(j.projectionMatrix,j.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(this.renderTarget);b.clear();q=i.__webglObjects;l=0;for(n=q.length;l<n;l++)if(m=q[l],o=m.object,m.render=!1,o.visible&&(!(o instanceof THREE.Mesh||o instanceof THREE.ParticleSystem)||!o.frustumCulled||
-g.contains(o)))o._modelViewMatrix.multiply(j.matrixWorldInverse,o.matrixWorld),m.render=!0;var t;l=0;for(n=q.length;l<n;l++)if(m=q[l],m.render&&(o=m.object,m=m.buffer,!(o instanceof THREE.ParticleSystem)||o.customDepthMaterial))(t=o.material instanceof THREE.MeshFaceMaterial?o.geometry.materials[0]:o.material)&&b.setMaterialFaces(o.material),p=0<o.geometry.morphTargets.length&&t.morphTargets,t=o instanceof THREE.SkinnedMesh&&t.skinning,p=o.customDepthMaterial?o.customDepthMaterial:t?p?f:e:p?d:c,m instanceof
-THREE.BufferGeometry?b.renderBufferDirect(j,i.__lights,null,p,m,o):b.renderBuffer(j,i.__lights,null,p,m,o);q=i.__webglObjectsImmediate;l=0;for(n=q.length;l<n;l++)m=q[l],o=m.object,o.visible&&(o._modelViewMatrix.multiply(j.matrixWorldInverse,o.matrixWorld),b.renderImmediateObject(j,i.__lights,null,c,o));l=b.getClearColor();n=b.getClearAlpha();a.clearColor(l.r,l.g,l.b,n);a.enable(a.BLEND)}};
+g.contains(o)))o._modelViewMatrix.multiply(j.matrixWorldInverse,o.matrixWorld),m.render=!0;var t;l=0;for(n=q.length;l<n;l++)if(m=q[l],m.render&&(o=m.object,m=m.buffer,!(o instanceof THREE.ParticleSystem)||o.customDepthMaterial))t=o.material instanceof THREE.MeshFaceMaterial?0<o.material.materials.length?o.material.materials[0]:o.geometry.materials[0]:o.material,t&&b.setMaterialFaces(o.material),p=0<o.geometry.morphTargets.length&&t.morphTargets,t=o instanceof THREE.SkinnedMesh&&t.skinning,p=o.customDepthMaterial?
+o.customDepthMaterial:t?p?f:e:p?d:c,m instanceof THREE.BufferGeometry?b.renderBufferDirect(j,i.__lights,null,p,m,o):b.renderBuffer(j,i.__lights,null,p,m,o);q=i.__webglObjectsImmediate;l=0;for(n=q.length;l<n;l++)m=q[l],o=m.object,o.visible&&(o._modelViewMatrix.multiply(j.matrixWorldInverse,o.matrixWorld),b.renderImmediateObject(j,i.__lights,null,c,o));l=b.getClearColor();n=b.getClearAlpha();a.clearColor(l.r,l.g,l.b,n);a.enable(a.BLEND)}};
 THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = (       visibility.r / 9.0 ) *\n( 1.0 - visibility.g / 9.0 ) *\n(       visibility.b / 9.0 ) *\n( 1.0 - visibility.a / 9.0 );\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",fragmentShader:"precision mediump float;\nuniform sampler2D map;\nuniform float opacity;\nuniform int renderType;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},
 THREE.ShaderFlares={lensFlareVertexTexture:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\nuniform sampler2D occlusionMap;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\nvec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.1 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.9, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.9 ) ) +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ) +\ntexture2D( occlusionMap, vec2( 0.5, 0.5 ) );\nvVisibility = (       visibility.r / 9.0 ) *\n( 1.0 - visibility.g / 9.0 ) *\n(       visibility.b / 9.0 ) *\n( 1.0 - visibility.a / 9.0 );\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",fragmentShader:"precision mediump float;\nuniform sampler2D map;\nuniform float opacity;\nuniform int renderType;\nuniform vec3 color;\nvarying vec2 vUV;\nvarying float vVisibility;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( 1.0, 0.0, 1.0, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * vVisibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"},
 lensFlare:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",fragmentShader:"precision mediump float;\nuniform sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform int renderType;\nuniform vec3 color;\nvarying vec2 vUV;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nfloat visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\nvisibility = ( 1.0 - visibility / 4.0 );\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * visibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"}};
 lensFlare:{vertexShader:"uniform vec3 screenPosition;\nuniform vec2 scale;\nuniform float rotation;\nuniform int renderType;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uv;\nvec2 pos = position;\nif( renderType == 2 ) {\npos.x = cos( rotation ) * position.x - sin( rotation ) * position.y;\npos.y = sin( rotation ) * position.x + cos( rotation ) * position.y;\n}\ngl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n}",fragmentShader:"precision mediump float;\nuniform sampler2D map;\nuniform sampler2D occlusionMap;\nuniform float opacity;\nuniform int renderType;\nuniform vec3 color;\nvarying vec2 vUV;\nvoid main() {\nif( renderType == 0 ) {\ngl_FragColor = vec4( texture2D( map, vUV ).rgb, 0.0 );\n} else if( renderType == 1 ) {\ngl_FragColor = texture2D( map, vUV );\n} else {\nfloat visibility = texture2D( occlusionMap, vec2( 0.5, 0.1 ) ).a +\ntexture2D( occlusionMap, vec2( 0.9, 0.5 ) ).a +\ntexture2D( occlusionMap, vec2( 0.5, 0.9 ) ).a +\ntexture2D( occlusionMap, vec2( 0.1, 0.5 ) ).a;\nvisibility = ( 1.0 - visibility / 4.0 );\nvec4 texture = texture2D( map, vUV );\ntexture.a *= opacity * visibility;\ngl_FragColor = texture;\ngl_FragColor.rgb *= color;\n}\n}"}};
 THREE.ShaderSprite={sprite:{vertexShader:"uniform int useScreenCoordinates;\nuniform int affectedByDistance;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position + alignment;\nvec2 rotatedPosition;\nrotatedPosition.x = ( cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y ) * scale.x;\nrotatedPosition.y = ( sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y ) * scale.y;\nvec4 finalPosition;\nif( useScreenCoordinates != 0 ) {\nfinalPosition = vec4( screenPosition.xy + rotatedPosition, screenPosition.z, 1.0 );\n} else {\nfinalPosition = projectionMatrix * modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition * ( affectedByDistance == 1 ? 1.0 : finalPosition.z );\n}\ngl_Position = finalPosition;\n}",
 THREE.ShaderSprite={sprite:{vertexShader:"uniform int useScreenCoordinates;\nuniform int affectedByDistance;\nuniform vec3 screenPosition;\nuniform mat4 modelViewMatrix;\nuniform mat4 projectionMatrix;\nuniform float rotation;\nuniform vec2 scale;\nuniform vec2 alignment;\nuniform vec2 uvOffset;\nuniform vec2 uvScale;\nattribute vec2 position;\nattribute vec2 uv;\nvarying vec2 vUV;\nvoid main() {\nvUV = uvOffset + uv * uvScale;\nvec2 alignedPosition = position + alignment;\nvec2 rotatedPosition;\nrotatedPosition.x = ( cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y ) * scale.x;\nrotatedPosition.y = ( sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y ) * scale.y;\nvec4 finalPosition;\nif( useScreenCoordinates != 0 ) {\nfinalPosition = vec4( screenPosition.xy + rotatedPosition, screenPosition.z, 1.0 );\n} else {\nfinalPosition = projectionMatrix * modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\nfinalPosition.xy += rotatedPosition * ( affectedByDistance == 1 ? 1.0 : finalPosition.z );\n}\ngl_Position = finalPosition;\n}",

+ 4 - 2
src/core/Projector.js

@@ -196,7 +196,7 @@ THREE.Projector = function() {
 
 
 		_renderData = projectGraph( scene, sortObjects );
 		_renderData = projectGraph( scene, sortObjects );
 
 
-		for ( o = 0, ol = _renderData.objects.length; o < ol; o++ ) {
+		for ( o = 0, ol = _renderData.objects.length; o < ol; o ++ ) {
 
 
 			object = _renderData.objects[ o ].object;
 			object = _renderData.objects[ o ].object;
 
 
@@ -207,7 +207,7 @@ THREE.Projector = function() {
 			if ( object instanceof THREE.Mesh ) {
 			if ( object instanceof THREE.Mesh ) {
 
 
 				geometry = object.geometry;
 				geometry = object.geometry;
-				geometryMaterials = object.geometry.materials;
+
 				vertices = geometry.vertices;
 				vertices = geometry.vertices;
 				faces = geometry.faces;
 				faces = geometry.faces;
 				faceVertexUvs = geometry.faceVertexUvs;
 				faceVertexUvs = geometry.faceVertexUvs;
@@ -216,6 +216,8 @@ THREE.Projector = function() {
 				_normalMatrix.transpose();
 				_normalMatrix.transpose();
 
 
 				isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
 				isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
+				geometryMaterials = ( isFaceMaterial && object.material.materials.length > 0 ) ? object.material.materials : object.geometry.materials;
+
 				side = object.material.side;
 				side = object.material.side;
 
 
 				for ( v = 0, vl = vertices.length; v < vl; v ++ ) {
 				for ( v = 0, vl = vertices.length; v < vl; v ++ ) {

+ 2 - 1
src/core/Ray.js

@@ -109,8 +109,9 @@
 			var geometry = object.geometry;
 			var geometry = object.geometry;
 			var vertices = geometry.vertices;
 			var vertices = geometry.vertices;
 
 
-			var geometryMaterials = object.geometry.materials;
 			var isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
 			var isFaceMaterial = object.material instanceof THREE.MeshFaceMaterial;
+			var geometryMaterials = ( isFaceMaterial && object.material.materials.length > 0 ) ? object.material.materials : object.geometry.materials;
+
 			var side = object.material.side;
 			var side = object.material.side;
 
 
 			var a, b, c, d;
 			var a, b, c, d;

+ 18 - 2
src/extras/renderers/plugins/DepthPassPlugin.js

@@ -196,9 +196,25 @@ THREE.DepthPassPlugin = function ( ) {
 
 
 	function getObjectMaterial( object ) {
 	function getObjectMaterial( object ) {
 
 
-		return object.material instanceof THREE.MeshFaceMaterial ? object.geometry.materials[ 0 ] : object.material;
+		if ( object.material instanceof THREE.MeshFaceMaterial ) {
 
 
-	}
+			if ( object.material.materials.length > 0 ) {
+
+				return object.material.materials[ 0 ];
+
+			} else {
+
+				return object.geometry.materials[ 0 ];
+
+			}
+
+		} else {
+
+			return object.material;
+
+		}
+
+	};
 
 
 };
 };
 
 

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

@@ -480,9 +480,25 @@ THREE.ShadowMapPlugin = function ( ) {
 
 
 	function getObjectMaterial( object ) {
 	function getObjectMaterial( object ) {
 
 
-		return object.material instanceof THREE.MeshFaceMaterial ? object.geometry.materials[ 0 ] : object.material;
+		if ( object.material instanceof THREE.MeshFaceMaterial ) {
 
 
-	}
+			if ( object.material.materials.length > 0 ) {
+
+				return object.material.materials[ 0 ];
+
+			} else {
+
+				return object.geometry.materials[ 0 ];
+
+			}
+
+		} else {
+
+			return object.material;
+
+		}
+
+	};
 
 
 };
 };