Browse Source

Updated builds.

Mr.doob 10 years ago
parent
commit
9ab9f06ed8
2 changed files with 25 additions and 23 deletions
  1. 13 12
      build/three.js
  2. 12 11
      build/three.min.js

+ 13 - 12
build/three.js

@@ -7816,6 +7816,12 @@ THREE.Object3D = function () {
 		scale: {
 		scale: {
 			enumerable: true,
 			enumerable: true,
 			value: scale
 			value: scale
+		},
+		modelViewMatrix: {
+			value: new THREE.Matrix4()
+		},
+		normalMatrix: {
+			value: new THREE.Matrix3()
 		}
 		}
 	} );
 	} );
 
 
@@ -21014,8 +21020,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 			var object = webglObject.object;
 			var object = webglObject.object;
 			var geometry = objects.update( object );
 			var geometry = objects.update( object );
 
 
-			object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
-			object._normalMatrix.getNormalMatrix( object._modelViewMatrix );
+			object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
+			object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
 
 
 			if ( overrideMaterial === undefined ) material = object.material;
 			if ( overrideMaterial === undefined ) material = object.material;
 
 
@@ -21055,8 +21061,8 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 			var object = renderList[ i ];
 			var object = renderList[ i ];
 
 
-			object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
-			object._normalMatrix.getNormalMatrix( object._modelViewMatrix );
+			object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
+			object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
 
 
 			if ( overrideMaterial === undefined ) material = object.material;
 			if ( overrideMaterial === undefined ) material = object.material;
 
 
@@ -21862,11 +21868,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 
 	function loadUniformsMatrices ( uniforms, object ) {
 	function loadUniformsMatrices ( uniforms, object ) {
 
 
-		_gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, object._modelViewMatrix.elements );
+		_gl.uniformMatrix4fv( uniforms.modelViewMatrix, false, object.modelViewMatrix.elements );
 
 
 		if ( uniforms.normalMatrix ) {
 		if ( uniforms.normalMatrix ) {
 
 
-			_gl.uniformMatrix3fv( uniforms.normalMatrix, false, object._normalMatrix.elements );
+			_gl.uniformMatrix3fv( uniforms.normalMatrix, false, object.normalMatrix.elements );
 
 
 		}
 		}
 
 
@@ -23838,9 +23844,6 @@ THREE.WebGLObjects = function ( gl, properties, info ) {
 
 
 		}
 		}
 
 
-		delete object._modelViewMatrix;
-		delete object._normalMatrix;
-
 		properties.delete( object );
 		properties.delete( object );
 
 
 	}
 	}
@@ -23856,8 +23859,6 @@ THREE.WebGLObjects = function ( gl, properties, info ) {
 		if ( objectProperties.__webglInit === undefined ) {
 		if ( objectProperties.__webglInit === undefined ) {
 
 
 			objectProperties.__webglInit = true;
 			objectProperties.__webglInit = true;
-			object._modelViewMatrix = new THREE.Matrix4();
-			object._normalMatrix = new THREE.Matrix3();
 
 
 			object.addEventListener( 'removed', onObjectRemoved );
 			object.addEventListener( 'removed', onObjectRemoved );
 
 
@@ -24991,7 +24992,7 @@ THREE.WebGLShadowMap = function ( _renderer, _lights, _objects ) {
 
 
 			if ( material !== null && material.visible === true ) {
 			if ( material !== null && material.visible === true ) {
 
 
-				object._modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
+				object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
 				_renderList.push( webglObject );
 				_renderList.push( webglObject );
 
 
 			}
 			}

+ 12 - 11
build/three.min.js

@@ -164,7 +164,8 @@ c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!
 (this.ray.origin.setFromMatrixPosition(c.matrixWorld),this.ray.direction.set(b.x,b.y,.5).unproject(c).sub(this.ray.origin).normalize()):c instanceof a.OrthographicCamera?(this.ray.origin.set(b.x,b.y,-1).unproject(c),this.ray.direction.set(0,0,-1).transformDirection(c.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(a,e){var g=[];c(a,this,g,e);g.sort(b);return g},intersectObjects:function(a,e){var g=[];if(!1===Array.isArray(a))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),
 (this.ray.origin.setFromMatrixPosition(c.matrixWorld),this.ray.direction.set(b.x,b.y,.5).unproject(c).sub(this.ray.origin).normalize()):c instanceof a.OrthographicCamera?(this.ray.origin.set(b.x,b.y,-1).unproject(c),this.ray.direction.set(0,0,-1).transformDirection(c.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(a,e){var g=[];c(a,this,g,e);g.sort(b);return g},intersectObjects:function(a,e){var g=[];if(!1===Array.isArray(a))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),
 g;for(var f=0,h=a.length;f<h;f++)c(a[f],this,g,e);g.sort(b);return g}}})(THREE);
 g;for(var f=0,h=a.length;f<h;f++)c(a[f],this,g,e);g.sort(b);return g}}})(THREE);
 THREE.Object3D=function(){Object.defineProperty(this,"id",{value:THREE.Object3DIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=THREE.Object3D.DefaultUp.clone();var a=new THREE.Vector3,b=new THREE.Euler,c=new THREE.Quaternion,d=new THREE.Vector3(1,1,1);b.onChange(function(){c.setFromEuler(b,!1)});c.onChange(function(){b.setFromQuaternion(c,void 0,!1)});Object.defineProperties(this,{position:{enumerable:!0,value:a},rotation:{enumerable:!0,
 THREE.Object3D=function(){Object.defineProperty(this,"id",{value:THREE.Object3DIdCount++});this.uuid=THREE.Math.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=THREE.Object3D.DefaultUp.clone();var a=new THREE.Vector3,b=new THREE.Euler,c=new THREE.Quaternion,d=new THREE.Vector3(1,1,1);b.onChange(function(){c.setFromEuler(b,!1)});c.onChange(function(){b.setFromQuaternion(c,void 0,!1)});Object.defineProperties(this,{position:{enumerable:!0,value:a},rotation:{enumerable:!0,
-value:b},quaternion:{enumerable:!0,value:c},scale:{enumerable:!0,value:d}});this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixAutoUpdate=THREE.Object3D.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={}};THREE.Object3D.DefaultUp=new THREE.Vector3(0,1,0);THREE.Object3D.DefaultMatrixAutoUpdate=!0;
+value:b},quaternion:{enumerable:!0,value:c},scale:{enumerable:!0,value:d},modelViewMatrix:{value:new THREE.Matrix4},normalMatrix:{value:new THREE.Matrix3}});this.rotationAutoUpdate=!0;this.matrix=new THREE.Matrix4;this.matrixWorld=new THREE.Matrix4;this.matrixAutoUpdate=THREE.Object3D.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={}};
+THREE.Object3D.DefaultUp=new THREE.Vector3(0,1,0);THREE.Object3D.DefaultMatrixAutoUpdate=!0;
 THREE.Object3D.prototype={constructor:THREE.Object3D,get eulerOrder(){console.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order.");return this.rotation.order},set eulerOrder(a){console.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order.");this.rotation.order=a},get useQuaternion(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set useQuaternion(a){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},
 THREE.Object3D.prototype={constructor:THREE.Object3D,get eulerOrder(){console.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order.");return this.rotation.order},set eulerOrder(a){console.warn("THREE.Object3D: .eulerOrder has been moved to .rotation.order.");this.rotation.order=a},get useQuaternion(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set useQuaternion(a){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},
 set renderDepth(a){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},setRotationFromQuaternion:function(a){this.quaternion.copy(a)},
 set renderDepth(a){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},applyMatrix:function(a){this.matrix.multiplyMatrices(a,this.matrix);this.matrix.decompose(this.position,this.quaternion,this.scale)},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},setRotationFromQuaternion:function(a){this.quaternion.copy(a)},
 rotateOnAxis:function(){var a=new THREE.Quaternion;return function(b,c){a.setFromAxisAngle(b,c);this.quaternion.multiply(a);return this}}(),rotateX:function(){var a=new THREE.Vector3(1,0,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateY:function(){var a=new THREE.Vector3(0,1,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateZ:function(){var a=new THREE.Vector3(0,0,1);return function(b){return this.rotateOnAxis(a,b)}}(),translateOnAxis:function(){var a=new THREE.Vector3;return function(b,
 rotateOnAxis:function(){var a=new THREE.Quaternion;return function(b,c){a.setFromAxisAngle(b,c);this.quaternion.multiply(a);return this}}(),rotateX:function(){var a=new THREE.Vector3(1,0,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateY:function(){var a=new THREE.Vector3(0,1,0);return function(b){return this.rotateOnAxis(a,b)}}(),rotateZ:function(){var a=new THREE.Vector3(0,0,1);return function(b){return this.rotateOnAxis(a,b)}}(),translateOnAxis:function(){var a=new THREE.Vector3;return function(b,
@@ -492,8 +493,8 @@ function f(a){a=a.target;a.removeEventListener("dispose",f);var b=Z.get(a);if(a&
 Z.get(a).program.program;if(void 0!==b){a.program=void 0;a=0;for(var c=va.length;a!==c;++a){var d=va[a];if(d.program===b){0===--d.usedTimes&&(c-=1,va[a]=va[c],va.pop(),s.deleteProgram(b),Ca.programs=c);break}}}}function m(a,b){return b[0]-a[0]}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.object.material.id!==b.object.material.id?a.object.material.id-b.object.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function p(a,b){return a.object.renderOrder!==
 Z.get(a).program.program;if(void 0!==b){a.program=void 0;a=0;for(var c=va.length;a!==c;++a){var d=va[a];if(d.program===b){0===--d.usedTimes&&(c-=1,va[a]=va[c],va.pop(),s.deleteProgram(b),Ca.programs=c);break}}}}function m(a,b){return b[0]-a[0]}function n(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.object.material.id!==b.object.material.id?a.object.material.id-b.object.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function p(a,b){return a.object.renderOrder!==
 b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function l(a){if(!1!==a.visible){if(!(a instanceof THREE.Scene||a instanceof THREE.Group))if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),ua.init(a),a instanceof THREE.Light)aa.push(a);else if(a instanceof THREE.Sprite)Pa.push(a);else if(a instanceof THREE.LensFlare)Ja.push(a);else if(a instanceof THREE.ImmediateRenderObject){var b=a.material;b.transparent?za.push(a):ma.push(a)}else{var c=ua.objects[a.id];
 b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.z!==b.z?b.z-a.z:a.id-b.id}function l(a){if(!1!==a.visible){if(!(a instanceof THREE.Scene||a instanceof THREE.Group))if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),ua.init(a),a instanceof THREE.Light)aa.push(a);else if(a instanceof THREE.Sprite)Pa.push(a);else if(a instanceof THREE.LensFlare)Ja.push(a);else if(a instanceof THREE.ImmediateRenderObject){var b=a.material;b.transparent?za.push(a):ma.push(a)}else{var c=ua.objects[a.id];
 if(c&&(!1===a.frustumCulled||!0===Ya.intersectsObject(a))&&(b=a.material,!0===b.visible)){if(b instanceof THREE.MeshFaceMaterial)for(var d=b.materials,e=0,f=d.length;e<f;e++)d[e].program=Z.get(d[e]).program;else b.program=Z.get(b).program;b.transparent?ta.push(c):pa.push(c);!0===ja.sortObjects&&(ka.setFromMatrixPosition(a.matrixWorld),ka.applyProjection(Qa),c.z=ka.z)}}a=a.children;e=0;for(f=a.length;e<f;e++)l(a[e])}}function q(a,b,c,d,e){for(var f=e,g=0,h=a.length;g<h;g++){var k=a[g].object,l=ua.update(k);
 if(c&&(!1===a.frustumCulled||!0===Ya.intersectsObject(a))&&(b=a.material,!0===b.visible)){if(b instanceof THREE.MeshFaceMaterial)for(var d=b.materials,e=0,f=d.length;e<f;e++)d[e].program=Z.get(d[e]).program;else b.program=Z.get(b).program;b.transparent?ta.push(c):pa.push(c);!0===ja.sortObjects&&(ka.setFromMatrixPosition(a.matrixWorld),ka.applyProjection(Qa),c.z=ka.z)}}a=a.children;e=0;for(f=a.length;e<f;e++)l(a[e])}}function q(a,b,c,d,e){for(var f=e,g=0,h=a.length;g<h;g++){var k=a[g].object,l=ua.update(k);
-k._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,k.matrixWorld);k._normalMatrix.getNormalMatrix(k._modelViewMatrix);void 0===e&&(f=k.material);if(f instanceof THREE.MeshFaceMaterial)for(var m=l.groups,n=f.materials,p=0,q=m.length;p<q;p++){var t=m[p],s=n[t.materialIndex];void 0!==s&&ja.renderBufferDirect(b,c,d,l,s,k,t)}else ja.renderBufferDirect(b,c,d,l,f,k)}}function t(a,b,c,d,e){for(var f=e,g=0,h=a.length;g<h;g++){var k=a[g];k._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,k.matrixWorld);
-k._normalMatrix.getNormalMatrix(k._modelViewMatrix);void 0===e&&(f=k.material);r(f);var l=u(b,c,d,f,k);Ia="";k.render(function(a){ja.renderBufferImmediate(a,l,f)})}}function r(a){a.side!==THREE.DoubleSide?L.enable(s.CULL_FACE):L.disable(s.CULL_FACE);L.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?L.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):L.setBlending(THREE.NoBlending);L.setDepthFunc(a.depthFunc);L.setDepthTest(a.depthTest);
+k.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,k.matrixWorld);k.normalMatrix.getNormalMatrix(k.modelViewMatrix);void 0===e&&(f=k.material);if(f instanceof THREE.MeshFaceMaterial)for(var m=l.groups,n=f.materials,p=0,q=m.length;p<q;p++){var t=m[p],s=n[t.materialIndex];void 0!==s&&ja.renderBufferDirect(b,c,d,l,s,k,t)}else ja.renderBufferDirect(b,c,d,l,f,k)}}function t(a,b,c,d,e){for(var f=e,g=0,h=a.length;g<h;g++){var k=a[g];k.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,k.matrixWorld);
+k.normalMatrix.getNormalMatrix(k.modelViewMatrix);void 0===e&&(f=k.material);r(f);var l=u(b,c,d,f,k);Ia="";k.render(function(a){ja.renderBufferImmediate(a,l,f)})}}function r(a){a.side!==THREE.DoubleSide?L.enable(s.CULL_FACE):L.disable(s.CULL_FACE);L.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?L.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):L.setBlending(THREE.NoBlending);L.setDepthFunc(a.depthFunc);L.setDepthTest(a.depthTest);
 L.setDepthWrite(a.depthWrite);L.setColorWrite(a.colorWrite);L.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function u(a,b,c,d,e){var f,l,m,n;fb=0;var p=Z.get(d);if(d.needsUpdate||!p.program){a:{for(var q=Z.get(d),t=ac[d.type],r=0,u=0,y=0,z=0,B=0,E=b.length;B<E;B++){var D=b[B];D.onlyShadow||!1===D.visible||(D instanceof THREE.DirectionalLight&&r++,D instanceof THREE.PointLight&&u++,D instanceof THREE.SpotLight&&y++,D instanceof THREE.HemisphereLight&&z++)}f=r;l=u;m=
 L.setDepthWrite(a.depthWrite);L.setColorWrite(a.colorWrite);L.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function u(a,b,c,d,e){var f,l,m,n;fb=0;var p=Z.get(d);if(d.needsUpdate||!p.program){a:{for(var q=Z.get(d),t=ac[d.type],r=0,u=0,y=0,z=0,B=0,E=b.length;B<E;B++){var D=b[B];D.onlyShadow||!1===D.visible||(D instanceof THREE.DirectionalLight&&r++,D instanceof THREE.PointLight&&u++,D instanceof THREE.SpotLight&&y++,D instanceof THREE.HemisphereLight&&z++)}f=r;l=u;m=
 y;n=z;for(var K,H=0,O=0,Q=b.length;O<Q;O++){var pa=b[O];pa.castShadow&&(pa instanceof THREE.SpotLight&&H++,pa instanceof THREE.DirectionalLight&&H++)}K=H;var P;if(mb&&e&&e.skeleton&&e.skeleton.useVertexTexture)P=1024;else{var R=s.getParameter(s.MAX_VERTEX_UNIFORM_VECTORS),T=Math.floor((R-20)/4);void 0!==e&&e instanceof THREE.SkinnedMesh&&(T=Math.min(e.skeleton.bones.length,T),T<e.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+e.skeleton.bones.length+", this GPU supports just "+
 y;n=z;for(var K,H=0,O=0,Q=b.length;O<Q;O++){var pa=b[O];pa.castShadow&&(pa instanceof THREE.SpotLight&&H++,pa instanceof THREE.DirectionalLight&&H++)}K=H;var P;if(mb&&e&&e.skeleton&&e.skeleton.useVertexTexture)P=1024;else{var R=s.getParameter(s.MAX_VERTEX_UNIFORM_VECTORS),T=Math.floor((R-20)/4);void 0!==e&&e instanceof THREE.SkinnedMesh&&(T=Math.min(e.skeleton.bones.length,T),T<e.skeleton.bones.length&&console.warn("WebGLRenderer: too many bones - "+e.skeleton.bones.length+", this GPU supports just "+
 T+" (try OpenGL instead of ANGLE)"));P=T}var U=G;null!==d.precision&&(U=L.getMaxPrecision(d.precision),U!==d.precision&&console.warn("THREE.WebGLRenderer.initMaterial:",d.precision,"not supported, using",U,"instead."));var za={precision:U,supportsVertexTextures:nb,map:!!d.map,envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,lightMap:!!d.lightMap,aoMap:!!d.aoMap,emissiveMap:!!d.emissiveMap,bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,combine:d.combine,
 T+" (try OpenGL instead of ANGLE)"));P=T}var U=G;null!==d.precision&&(U=L.getMaxPrecision(d.precision),U!==d.precision&&console.warn("THREE.WebGLRenderer.initMaterial:",d.precision,"not supported, using",U,"instead."));var za={precision:U,supportsVertexTextures:nb,map:!!d.map,envMap:!!d.envMap,envMapMode:d.envMap&&d.envMap.mapping,lightMap:!!d.lightMap,aoMap:!!d.aoMap,emissiveMap:!!d.emissiveMap,bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,combine:d.combine,
@@ -523,7 +524,7 @@ break;case "v2v":void 0===V._array&&(V._array=new Float32Array(2*N.length));for(
 fa.flipY);for(var Xb=fa instanceof THREE.CompressedTexture,Hb=fa.image[0]instanceof THREE.DataTexture,Na=[],ha=0;6>ha;ha++)Na[ha]=!ja.autoScaleCubemaps||Xb||Hb?Hb?fa.image[ha].image:fa.image[ha]:C(fa.image[ha],bc);var Yb=Na[0],Zb=THREE.Math.isPowerOfTwo(Yb.width)&&THREE.Math.isPowerOfTwo(Yb.height),Fa=M(fa.format),Ib=M(fa.type);x(s.TEXTURE_CUBE_MAP,fa,Zb);for(ha=0;6>ha;ha++)if(Xb)for(var Oa,$b=Na[ha].mipmaps,cb=0,Pb=$b.length;cb<Pb;cb++)Oa=$b[cb],fa.format!==THREE.RGBAFormat&&fa.format!==THREE.RGBFormat?
 fa.flipY);for(var Xb=fa instanceof THREE.CompressedTexture,Hb=fa.image[0]instanceof THREE.DataTexture,Na=[],ha=0;6>ha;ha++)Na[ha]=!ja.autoScaleCubemaps||Xb||Hb?Hb?fa.image[ha].image:fa.image[ha]:C(fa.image[ha],bc);var Yb=Na[0],Zb=THREE.Math.isPowerOfTwo(Yb.width)&&THREE.Math.isPowerOfTwo(Yb.height),Fa=M(fa.format),Ib=M(fa.type);x(s.TEXTURE_CUBE_MAP,fa,Zb);for(ha=0;6>ha;ha++)if(Xb)for(var Oa,$b=Na[ha].mipmaps,cb=0,Pb=$b.length;cb<Pb;cb++)Oa=$b[cb],fa.format!==THREE.RGBAFormat&&fa.format!==THREE.RGBFormat?
 -1<L.getCompressedTextureFormats().indexOf(Fa)?L.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,cb,Fa,Oa.width,Oa.height,0,Oa.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):L.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,cb,Fa,Oa.width,Oa.height,0,Fa,Ib,Oa.data);else Hb?L.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,0,Fa,Na[ha].width,Na[ha].height,0,Fa,Ib,Na[ha].data):L.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,0,Fa,Fa,Ib,
 -1<L.getCompressedTextureFormats().indexOf(Fa)?L.compressedTexImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,cb,Fa,Oa.width,Oa.height,0,Oa.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setCubeTexture()"):L.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,cb,Fa,Oa.width,Oa.height,0,Fa,Ib,Oa.data);else Hb?L.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,0,Fa,Na[ha].width,Na[ha].height,0,Fa,Ib,Na[ha].data):L.texImage2D(s.TEXTURE_CUBE_MAP_POSITIVE_X+ha,0,Fa,Fa,Ib,
 Na[ha]);fa.generateMipmaps&&Zb&&s.generateMipmap(s.TEXTURE_CUBE_MAP);Va.__version=fa.version;if(fa.onUpdate)fa.onUpdate(fa)}else L.activeTexture(s.TEXTURE0+Wb),L.bindTexture(s.TEXTURE_CUBE_MAP,Va.__image__webglTextureCube)}else if(ra instanceof THREE.WebGLRenderTargetCube){var cc=ra;L.activeTexture(s.TEXTURE0+Ma);L.bindTexture(s.TEXTURE_CUBE_MAP,Z.get(cc).__webglTexture)}else ja.setTexture(ra,Ma);break;case "tv":void 0===V._array&&(V._array=[]);S=0;for(oa=V.value.length;S<oa;S++)V._array[S]=w();s.uniform1iv(W,
 Na[ha]);fa.generateMipmaps&&Zb&&s.generateMipmap(s.TEXTURE_CUBE_MAP);Va.__version=fa.version;if(fa.onUpdate)fa.onUpdate(fa)}else L.activeTexture(s.TEXTURE0+Wb),L.bindTexture(s.TEXTURE_CUBE_MAP,Va.__image__webglTextureCube)}else if(ra instanceof THREE.WebGLRenderTargetCube){var cc=ra;L.activeTexture(s.TEXTURE0+Ma);L.bindTexture(s.TEXTURE_CUBE_MAP,Z.get(cc).__webglTexture)}else ja.setTexture(ra,Ma);break;case "tv":void 0===V._array&&(V._array=[]);S=0;for(oa=V.value.length;S<oa;S++)V._array[S]=w();s.uniform1iv(W,
-V._array);S=0;for(oa=V.value.length;S<oa;S++)ra=V.value[S],Ma=V._array[S],ra&&ja.setTexture(ra,Ma);break;default:console.warn("THREE.WebGLRenderer: Unknown uniform type: "+Vb)}}}}s.uniformMatrix4fv(ca.modelViewMatrix,!1,e._modelViewMatrix.elements);ca.normalMatrix&&s.uniformMatrix3fv(ca.normalMatrix,!1,e._normalMatrix.elements);void 0!==ca.modelMatrix&&s.uniformMatrix4fv(ca.modelMatrix,!1,e.matrixWorld.elements);return Za}function v(a,b){a.ambientLightColor.needsUpdate=b;a.directionalLightColor.needsUpdate=
+V._array);S=0;for(oa=V.value.length;S<oa;S++)ra=V.value[S],Ma=V._array[S],ra&&ja.setTexture(ra,Ma);break;default:console.warn("THREE.WebGLRenderer: Unknown uniform type: "+Vb)}}}}s.uniformMatrix4fv(ca.modelViewMatrix,!1,e.modelViewMatrix.elements);ca.normalMatrix&&s.uniformMatrix3fv(ca.normalMatrix,!1,e.normalMatrix.elements);void 0!==ca.modelMatrix&&s.uniformMatrix4fv(ca.modelMatrix,!1,e.matrixWorld.elements);return Za}function v(a,b){a.ambientLightColor.needsUpdate=b;a.directionalLightColor.needsUpdate=
 b;a.directionalLightDirection.needsUpdate=b;a.pointLightColor.needsUpdate=b;a.pointLightPosition.needsUpdate=b;a.pointLightDistance.needsUpdate=b;a.pointLightDecay.needsUpdate=b;a.spotLightColor.needsUpdate=b;a.spotLightPosition.needsUpdate=b;a.spotLightDistance.needsUpdate=b;a.spotLightDirection.needsUpdate=b;a.spotLightAngleCos.needsUpdate=b;a.spotLightExponent.needsUpdate=b;a.spotLightDecay.needsUpdate=b;a.hemisphereLightSkyColor.needsUpdate=b;a.hemisphereLightGroundColor.needsUpdate=b;a.hemisphereLightDirection.needsUpdate=
 b;a.directionalLightDirection.needsUpdate=b;a.pointLightColor.needsUpdate=b;a.pointLightPosition.needsUpdate=b;a.pointLightDistance.needsUpdate=b;a.pointLightDecay.needsUpdate=b;a.spotLightColor.needsUpdate=b;a.spotLightPosition.needsUpdate=b;a.spotLightDistance.needsUpdate=b;a.spotLightDirection.needsUpdate=b;a.spotLightAngleCos.needsUpdate=b;a.spotLightExponent.needsUpdate=b;a.spotLightDecay.needsUpdate=b;a.hemisphereLightSkyColor.needsUpdate=b;a.hemisphereLightGroundColor.needsUpdate=b;a.hemisphereLightDirection.needsUpdate=
 b}function w(){var a=fb;a>=db&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+db);fb+=1;return a}function A(a,b,c,d){a[b+0]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function x(a,b,c){c?(s.texParameteri(a,s.TEXTURE_WRAP_S,M(b.wrapS)),s.texParameteri(a,s.TEXTURE_WRAP_T,M(b.wrapT)),s.texParameteri(a,s.TEXTURE_MAG_FILTER,M(b.magFilter)),s.texParameteri(a,s.TEXTURE_MIN_FILTER,M(b.minFilter))):(s.texParameteri(a,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(a,s.TEXTURE_WRAP_T,
 b}function w(){var a=fb;a>=db&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+db);fb+=1;return a}function A(a,b,c,d){a[b+0]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function x(a,b,c){c?(s.texParameteri(a,s.TEXTURE_WRAP_S,M(b.wrapS)),s.texParameteri(a,s.TEXTURE_WRAP_T,M(b.wrapT)),s.texParameteri(a,s.TEXTURE_MAG_FILTER,M(b.magFilter)),s.texParameteri(a,s.TEXTURE_MIN_FILTER,M(b.minFilter))):(s.texParameteri(a,s.TEXTURE_WRAP_S,s.CLAMP_TO_EDGE),s.texParameteri(a,s.TEXTURE_WRAP_T,
 s.CLAMP_TO_EDGE),b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===THREE.ClampToEdgeWrapping||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping. ( "+b.sourceFile+" )"),s.texParameteri(a,s.TEXTURE_MAG_FILTER,B(b.magFilter)),s.texParameteri(a,s.TEXTURE_MIN_FILTER,B(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter. ( "+
 s.CLAMP_TO_EDGE),b.wrapS===THREE.ClampToEdgeWrapping&&b.wrapT===THREE.ClampToEdgeWrapping||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping. ( "+b.sourceFile+" )"),s.texParameteri(a,s.TEXTURE_MAG_FILTER,B(b.magFilter)),s.texParameteri(a,s.TEXTURE_MIN_FILTER,B(b.minFilter)),b.minFilter!==THREE.NearestFilter&&b.minFilter!==THREE.LinearFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter. ( "+
@@ -584,12 +585,12 @@ THREE.WebGLExtensions=function(a){var b={};this.get=function(c){if(void 0!==b[c]
 break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};
 break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}null===d&&console.warn("THREE.WebGLRenderer: "+c+" extension not supported.");return b[c]=d}};
 THREE.WebGLGeometries=function(a,b,c){function d(a){a=a.target;var h=g[a.id].attributes,k;for(k in h)e(h[k]);a.removeEventListener("dispose",d);delete g[a.id];k=b.get(a);k.wireframe&&e(k.wireframe);c.memory.geometries--}function e(c){var d;d=c instanceof THREE.InterleavedBufferAttribute?b.get(c.data).__webglBuffer:b.get(c).__webglBuffer;void 0!==d&&(a.deleteBuffer(d),c instanceof THREE.InterleavedBufferAttribute?b.delete(c.data):b.delete(c))}var g={};this.get=function(a){var b=a.geometry;if(void 0!==
 THREE.WebGLGeometries=function(a,b,c){function d(a){a=a.target;var h=g[a.id].attributes,k;for(k in h)e(h[k]);a.removeEventListener("dispose",d);delete g[a.id];k=b.get(a);k.wireframe&&e(k.wireframe);c.memory.geometries--}function e(c){var d;d=c instanceof THREE.InterleavedBufferAttribute?b.get(c.data).__webglBuffer:b.get(c).__webglBuffer;void 0!==d&&(a.deleteBuffer(d),c instanceof THREE.InterleavedBufferAttribute?b.delete(c.data):b.delete(c))}var g={};this.get=function(a){var b=a.geometry;if(void 0!==
 g[b.id])return g[b.id];b.addEventListener("dispose",d);var e;b instanceof THREE.BufferGeometry?e=b:b instanceof THREE.Geometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new THREE.BufferGeometry).setFromObject(a)),e=b._bufferGeometry);g[b.id]=e;c.memory.geometries++;return e}};
 g[b.id])return g[b.id];b.addEventListener("dispose",d);var e;b instanceof THREE.BufferGeometry?e=b:b instanceof THREE.Geometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new THREE.BufferGeometry).setFromObject(a)),e=b._bufferGeometry);g[b.id]=e;c.memory.geometries++;return e}};
-THREE.WebGLObjects=function(a,b,c){function d(a){a.target.traverse(function(a){a.removeEventListener("remove",d);(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)&&delete f[a.id];delete a._modelViewMatrix;delete a._normalMatrix;b.delete(a)})}function e(c){var d;d=c instanceof THREE.IndexBufferAttribute?a.ELEMENT_ARRAY_BUFFER:a.ARRAY_BUFFER;c=c instanceof THREE.InterleavedBufferAttribute?c.data:c;var e=b.get(c);if(void 0===e.__webglBuffer){e.__webglBuffer=a.createBuffer();
-a.bindBuffer(d,e.__webglBuffer);var f=a.STATIC_DRAW;if(c instanceof THREE.DynamicBufferAttribute||c instanceof THREE.InstancedBufferAttribute&&!0===c.dynamic||c instanceof THREE.InterleavedBuffer&&!0===c.dynamic)f=a.DYNAMIC_DRAW;a.bufferData(d,c.array,f);e.version=c.version}else e.version!==c.version&&(a.bindBuffer(d,e.__webglBuffer),void 0===c.updateRange||-1===c.updateRange.count?a.bufferSubData(d,0,c.array):0===c.updateRange.count?console.error("THREE.WebGLObjects.updateBuffer: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually."):
-(a.bufferSubData(d,c.updateRange.offset*c.array.BYTES_PER_ELEMENT,c.array.subarray(c.updateRange.offset,c.updateRange.offset+c.updateRange.count)),c.updateRange.count=0),e.version=c.version)}function g(a,b,c){b=b<c?b+"_"+c:c+"_"+b;if(a.hasOwnProperty(b))return!1;a[b]=1;return!0}var f={},h=new THREE.WebGLGeometries(a,b,c);this.objects=f;this.init=function(a){var c=b.get(a);void 0===c.__webglInit&&(c.__webglInit=!0,a._modelViewMatrix=new THREE.Matrix4,a._normalMatrix=new THREE.Matrix3,a.addEventListener("removed",
-d));void 0===c.__webglActive&&(c.__webglActive=!0,a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.PointCloud)&&(f[a.id]={id:a.id,object:a,z:0})};this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(a){var c=b.get(a);if(void 0!==c.wireframe)return c.wireframe;var d=[];a=a.attributes;var f=a.index;a=a.position;console.time("wireframe");if(void 0!==f)for(var h=
-{},f=f.array,q=0,t=f.length;q<t;q+=3){var r=f[q+0],u=f[q+1],v=f[q+2];g(h,r,u)&&d.push(r,u);g(h,u,v)&&d.push(u,v);g(h,v,r)&&d.push(v,r)}else for(f=a.array,q=0,t=f.length/3-1;q<t;q+=3)r=q+0,u=q+1,v=q+2,d.push(r,u,u,v,v,r);console.timeEnd("wireframe");d=new THREE.IndexBufferAttribute(new (65535<a.count?Uint32Array:Uint16Array)(d),1);e(d);return c.wireframe=d};this.update=function(a){var b=h.get(a);a.geometry instanceof THREE.Geometry&&b.updateFromObject(a);a=b.attributes;for(var c in a)e(a[c]);a=b.morphAttributes;
-for(c in a)for(var d=a[c],f=0,g=d.length;f<g;f++)e(d[f]);return b};this.clear=function(){f={}}};
+THREE.WebGLObjects=function(a,b,c){function d(a){a.target.traverse(function(a){a.removeEventListener("remove",d);(a instanceof THREE.Mesh||a instanceof THREE.PointCloud||a instanceof THREE.Line)&&delete f[a.id];b.delete(a)})}function e(c){var d;d=c instanceof THREE.IndexBufferAttribute?a.ELEMENT_ARRAY_BUFFER:a.ARRAY_BUFFER;c=c instanceof THREE.InterleavedBufferAttribute?c.data:c;var e=b.get(c);if(void 0===e.__webglBuffer){e.__webglBuffer=a.createBuffer();a.bindBuffer(d,e.__webglBuffer);var f=a.STATIC_DRAW;
+if(c instanceof THREE.DynamicBufferAttribute||c instanceof THREE.InstancedBufferAttribute&&!0===c.dynamic||c instanceof THREE.InterleavedBuffer&&!0===c.dynamic)f=a.DYNAMIC_DRAW;a.bufferData(d,c.array,f);e.version=c.version}else e.version!==c.version&&(a.bindBuffer(d,e.__webglBuffer),void 0===c.updateRange||-1===c.updateRange.count?a.bufferSubData(d,0,c.array):0===c.updateRange.count?console.error("THREE.WebGLObjects.updateBuffer: using updateRange for THREE.DynamicBufferAttribute and marked as needsUpdate but count is 0, ensure you are using set methods or updating manually."):
+(a.bufferSubData(d,c.updateRange.offset*c.array.BYTES_PER_ELEMENT,c.array.subarray(c.updateRange.offset,c.updateRange.offset+c.updateRange.count)),c.updateRange.count=0),e.version=c.version)}function g(a,b,c){b=b<c?b+"_"+c:c+"_"+b;if(a.hasOwnProperty(b))return!1;a[b]=1;return!0}var f={},h=new THREE.WebGLGeometries(a,b,c);this.objects=f;this.init=function(a){var c=b.get(a);void 0===c.__webglInit&&(c.__webglInit=!0,a.addEventListener("removed",d));void 0===c.__webglActive&&(c.__webglActive=!0,a instanceof
+THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.PointCloud)&&(f[a.id]={id:a.id,object:a,z:0})};this.getAttributeBuffer=function(a){return a instanceof THREE.InterleavedBufferAttribute?b.get(a.data).__webglBuffer:b.get(a).__webglBuffer};this.getWireframeAttribute=function(a){var c=b.get(a);if(void 0!==c.wireframe)return c.wireframe;var d=[];a=a.attributes;var f=a.index;a=a.position;console.time("wireframe");if(void 0!==f)for(var h={},f=f.array,q=0,t=f.length;q<t;q+=3){var r=f[q+0],u=f[q+1],
+v=f[q+2];g(h,r,u)&&d.push(r,u);g(h,u,v)&&d.push(u,v);g(h,v,r)&&d.push(v,r)}else for(f=a.array,q=0,t=f.length/3-1;q<t;q+=3)r=q+0,u=q+1,v=q+2,d.push(r,u,u,v,v,r);console.timeEnd("wireframe");d=new THREE.IndexBufferAttribute(new (65535<a.count?Uint32Array:Uint16Array)(d),1);e(d);return c.wireframe=d};this.update=function(a){var b=h.get(a);a.geometry instanceof THREE.Geometry&&b.updateFromObject(a);a=b.attributes;for(var c in a)e(a[c]);a=b.morphAttributes;for(c in a)for(var d=a[c],f=0,g=d.length;f<g;f++)e(d[f]);
+return b};this.clear=function(){f={}}};
 THREE.WebGLProgram=function(){function a(a){var b=[],c;for(c in a){var f=a[c];!1!==f&&b.push("#define "+c+" "+f)}return b.join("\n")}function b(a){return""!==a}var c=0;return function(d,e,g,f){var h=d.context,k=g.defines,m=g.__webglShader.vertexShader,n=g.__webglShader.fragmentShader,p="SHADOWMAP_TYPE_BASIC";f.shadowMapType===THREE.PCFShadowMap?p="SHADOWMAP_TYPE_PCF":f.shadowMapType===THREE.PCFSoftShadowMap&&(p="SHADOWMAP_TYPE_PCF_SOFT");var l="ENVMAP_TYPE_CUBE",q="ENVMAP_MODE_REFLECTION",t="ENVMAP_BLENDING_MULTIPLY";
 THREE.WebGLProgram=function(){function a(a){var b=[],c;for(c in a){var f=a[c];!1!==f&&b.push("#define "+c+" "+f)}return b.join("\n")}function b(a){return""!==a}var c=0;return function(d,e,g,f){var h=d.context,k=g.defines,m=g.__webglShader.vertexShader,n=g.__webglShader.fragmentShader,p="SHADOWMAP_TYPE_BASIC";f.shadowMapType===THREE.PCFShadowMap?p="SHADOWMAP_TYPE_PCF":f.shadowMapType===THREE.PCFSoftShadowMap&&(p="SHADOWMAP_TYPE_PCF_SOFT");var l="ENVMAP_TYPE_CUBE",q="ENVMAP_MODE_REFLECTION",t="ENVMAP_BLENDING_MULTIPLY";
 if(f.envMap){switch(g.envMap.mapping){case THREE.CubeReflectionMapping:case THREE.CubeRefractionMapping:l="ENVMAP_TYPE_CUBE";break;case THREE.EquirectangularReflectionMapping:case THREE.EquirectangularRefractionMapping:l="ENVMAP_TYPE_EQUIREC";break;case THREE.SphericalReflectionMapping:l="ENVMAP_TYPE_SPHERE"}switch(g.envMap.mapping){case THREE.CubeRefractionMapping:case THREE.EquirectangularRefractionMapping:q="ENVMAP_MODE_REFRACTION"}switch(g.combine){case THREE.MultiplyOperation:t="ENVMAP_BLENDING_MULTIPLY";
 if(f.envMap){switch(g.envMap.mapping){case THREE.CubeReflectionMapping:case THREE.CubeRefractionMapping:l="ENVMAP_TYPE_CUBE";break;case THREE.EquirectangularReflectionMapping:case THREE.EquirectangularRefractionMapping:l="ENVMAP_TYPE_EQUIREC";break;case THREE.SphericalReflectionMapping:l="ENVMAP_TYPE_SPHERE"}switch(g.envMap.mapping){case THREE.CubeRefractionMapping:case THREE.EquirectangularRefractionMapping:q="ENVMAP_MODE_REFRACTION"}switch(g.combine){case THREE.MultiplyOperation:t="ENVMAP_BLENDING_MULTIPLY";
 break;case THREE.MixOperation:t="ENVMAP_BLENDING_MIX";break;case THREE.AddOperation:t="ENVMAP_BLENDING_ADD"}}var r=0<d.gammaFactor?d.gammaFactor:1,u=a(k),v=h.createProgram();g instanceof THREE.RawShaderMaterial?d=k="":(k=["precision "+f.precision+" float;","precision "+f.precision+" int;","#define SHADER_NAME "+g.__webglShader.name,u,f.supportsVertexTextures?"#define VERTEX_TEXTURES":"",d.gammaInput?"#define GAMMA_INPUT":"",d.gammaOutput?"#define GAMMA_OUTPUT":"","#define GAMMA_FACTOR "+r,"#define MAX_DIR_LIGHTS "+
 break;case THREE.MixOperation:t="ENVMAP_BLENDING_MIX";break;case THREE.AddOperation:t="ENVMAP_BLENDING_ADD"}}var r=0<d.gammaFactor?d.gammaFactor:1,u=a(k),v=h.createProgram();g instanceof THREE.RawShaderMaterial?d=k="":(k=["precision "+f.precision+" float;","precision "+f.precision+" int;","#define SHADER_NAME "+g.__webglShader.name,u,f.supportsVertexTextures?"#define VERTEX_TEXTURES":"",d.gammaInput?"#define GAMMA_INPUT":"",d.gammaOutput?"#define GAMMA_OUTPUT":"","#define GAMMA_FACTOR "+r,"#define MAX_DIR_LIGHTS "+
@@ -607,7 +608,7 @@ c).name;a[d]=h.getAttribLocation(v,d)}A=a}return A};Object.defineProperties(this
 THREE.WebGLProperties=function(){var a={};this.get=function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c};this.delete=function(b){delete a[b.uuid]};this.clear=function(){a={}}};
 THREE.WebGLProperties=function(){var a={};this.get=function(b){b=b.uuid;var c=a[b];void 0===c&&(c={},a[b]=c);return c};this.delete=function(b){delete a[b.uuid]};this.clear=function(){a={}}};
 THREE.WebGLShader=function(){var a=function(a){a=a.split("\n");for(var c=0;c<a.length;c++)a[c]=c+1+": "+a[c];return a.join("\n")};return function(b,c,d){var e=b.createShader(c);b.shaderSource(e,d);b.compileShader(e);!1===b.getShaderParameter(e,b.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile.");""!==b.getShaderInfoLog(e)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",c===b.VERTEX_SHADER?"vertex":"fragment",b.getShaderInfoLog(e),a(d));return e}}();
 THREE.WebGLShader=function(){var a=function(a){a=a.split("\n");for(var c=0;c<a.length;c++)a[c]=c+1+": "+a[c];return a.join("\n")};return function(b,c,d){var e=b.createShader(c);b.shaderSource(e,d);b.compileShader(e);!1===b.getShaderParameter(e,b.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile.");""!==b.getShaderInfoLog(e)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",c===b.VERTEX_SHADER?"vertex":"fragment",b.getShaderInfoLog(e),a(d));return e}}();
 THREE.WebGLShadowMap=function(a,b,c){function d(a,b){var c=a.geometry,c=void 0!==c.morphTargets&&0<c.morphTargets.length&&b.morphTargets,d=a instanceof THREE.SkinnedMesh&&b.skinning,c=a.customDepthMaterial?a.customDepthMaterial:d?c?u:r:c?t:q;c.visible=b.visible;c.wireframe=b.wireframe;c.wireframeLinewidth=b.wireframeLinewidth;return c}function e(a,b){if(!1!==a.visible){var d=c.objects[a.id];if(d&&a.castShadow&&(!1===a.frustumCulled||!0===h.intersectsObject(a))){var f=a.material;null!==f&&!0===f.visible&&
 THREE.WebGLShadowMap=function(a,b,c){function d(a,b){var c=a.geometry,c=void 0!==c.morphTargets&&0<c.morphTargets.length&&b.morphTargets,d=a instanceof THREE.SkinnedMesh&&b.skinning,c=a.customDepthMaterial?a.customDepthMaterial:d?c?u:r:c?t:q;c.visible=b.visible;c.wireframe=b.wireframe;c.wireframeLinewidth=b.wireframeLinewidth;return c}function e(a,b){if(!1!==a.visible){var d=c.objects[a.id];if(d&&a.castShadow&&(!1===a.frustumCulled||!0===h.intersectsObject(a))){var f=a.material;null!==f&&!0===f.visible&&
-(a._modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld),n.push(d))}for(var d=a.children,f=0,g=d.length;f<g;f++)e(d[f],b)}}var g=a.context,f=a.state,h=new THREE.Frustum,k=new THREE.Matrix4;new THREE.Vector3;new THREE.Vector3;var m=new THREE.Vector3,n=[],p=THREE.ShaderLib.depthRGBA,l=THREE.UniformsUtils.clone(p.uniforms),q=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,fragmentShader:p.fragmentShader}),t=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,
+(a.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,a.matrixWorld),n.push(d))}for(var d=a.children,f=0,g=d.length;f<g;f++)e(d[f],b)}}var g=a.context,f=a.state,h=new THREE.Frustum,k=new THREE.Matrix4;new THREE.Vector3;new THREE.Vector3;var m=new THREE.Vector3,n=[],p=THREE.ShaderLib.depthRGBA,l=THREE.UniformsUtils.clone(p.uniforms),q=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,fragmentShader:p.fragmentShader}),t=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,
 fragmentShader:p.fragmentShader,morphTargets:!0}),r=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,fragmentShader:p.fragmentShader,skinning:!0}),u=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,fragmentShader:p.fragmentShader,morphTargets:!0,skinning:!0});q._shadowPass=!0;t._shadowPass=!0;r._shadowPass=!0;u._shadowPass=!0;var v=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=THREE.PCFShadowMap;this.cullFace=THREE.CullFaceFront;this.render=
 fragmentShader:p.fragmentShader,morphTargets:!0}),r=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,fragmentShader:p.fragmentShader,skinning:!0}),u=new THREE.ShaderMaterial({uniforms:l,vertexShader:p.vertexShader,fragmentShader:p.fragmentShader,morphTargets:!0,skinning:!0});q._shadowPass=!0;t._shadowPass=!0;r._shadowPass=!0;u._shadowPass=!0;var v=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=THREE.PCFShadowMap;this.cullFace=THREE.CullFaceFront;this.render=
 function(l,q){if(!1!==v.enabled&&(!1!==v.autoUpdate||!1!==v.needsUpdate)){g.clearColor(1,1,1,1);f.disable(g.BLEND);f.enable(g.CULL_FACE);g.frontFace(g.CCW);v.cullFace===THREE.CullFaceFront?g.cullFace(g.FRONT):g.cullFace(g.BACK);f.setDepthTest(!0);for(var p=0,t=b.length;p<t;p++){var r=b[p];if(r.castShadow){if(!r.shadowMap){var u=THREE.LinearFilter;v.type===THREE.PCFSoftShadowMap&&(u=THREE.NearestFilter);r.shadowMap=new THREE.WebGLRenderTarget(r.shadowMapWidth,r.shadowMapHeight,{minFilter:u,magFilter:u,
 function(l,q){if(!1!==v.enabled&&(!1!==v.autoUpdate||!1!==v.needsUpdate)){g.clearColor(1,1,1,1);f.disable(g.BLEND);f.enable(g.CULL_FACE);g.frontFace(g.CCW);v.cullFace===THREE.CullFaceFront?g.cullFace(g.FRONT):g.cullFace(g.BACK);f.setDepthTest(!0);for(var p=0,t=b.length;p<t;p++){var r=b[p];if(r.castShadow){if(!r.shadowMap){var u=THREE.LinearFilter;v.type===THREE.PCFSoftShadowMap&&(u=THREE.NearestFilter);r.shadowMap=new THREE.WebGLRenderTarget(r.shadowMapWidth,r.shadowMapHeight,{minFilter:u,magFilter:u,
 format:THREE.RGBAFormat});r.shadowMapSize=new THREE.Vector2(r.shadowMapWidth,r.shadowMapHeight);r.shadowMatrix=new THREE.Matrix4}if(!r.shadowCamera){if(r instanceof THREE.SpotLight)r.shadowCamera=new THREE.PerspectiveCamera(r.shadowCameraFov,r.shadowMapWidth/r.shadowMapHeight,r.shadowCameraNear,r.shadowCameraFar);else if(r instanceof THREE.DirectionalLight)r.shadowCamera=new THREE.OrthographicCamera(r.shadowCameraLeft,r.shadowCameraRight,r.shadowCameraTop,r.shadowCameraBottom,r.shadowCameraNear,r.shadowCameraFar);
 format:THREE.RGBAFormat});r.shadowMapSize=new THREE.Vector2(r.shadowMapWidth,r.shadowMapHeight);r.shadowMatrix=new THREE.Matrix4}if(!r.shadowCamera){if(r instanceof THREE.SpotLight)r.shadowCamera=new THREE.PerspectiveCamera(r.shadowCameraFov,r.shadowMapWidth/r.shadowMapHeight,r.shadowCameraNear,r.shadowCameraFar);else if(r instanceof THREE.DirectionalLight)r.shadowCamera=new THREE.OrthographicCamera(r.shadowCameraLeft,r.shadowCameraRight,r.shadowCameraTop,r.shadowCameraBottom,r.shadowCameraNear,r.shadowCameraFar);