Mr.doob 10 лет назад
Родитель
Сommit
768e220058
2 измененных файлов с 31 добавлено и 27 удалено
  1. 5 1
      build/three.js
  2. 26 26
      build/three.min.js

+ 5 - 1
build/three.js

@@ -23059,7 +23059,11 @@ THREE.WebGLRenderer = function ( parameters ) {
 
 			} else if ( object instanceof THREE.Sprite ) {
 
-				sprites.push( object );
+				if ( object.frustumCulled === false || _frustum.intersectsObject( object ) === true ) {
+
+					sprites.push( object );
+
+				}
 
 			} else if ( object instanceof THREE.LensFlare ) {
 

+ 26 - 26
build/three.min.js

@@ -553,32 +553,32 @@ THREE.ShaderChunk.common,"vec4 pack1K ( float depth ) {\n   depth /= 1000.0;\n
 THREE.WebGLRenderer=function(a){function b(a,b,c,d){!0===C&&(a*=d,b*=d,c*=d);r.clearColor(a,b,c,d)}function c(){J.init();r.viewport(na,oa,pa,qa);b(U.r,U.g,U.b,X)}function d(){ra=Aa=null;sa="";ta=-1;wa=!0;J.reset()}function e(a){a.preventDefault();d();c();W.clear()}function g(a){a=a.target;a.removeEventListener("dispose",g);a:{var b=W.get(a);if(a.image&&b.__image__webglTextureCube)r.deleteTexture(b.__image__webglTextureCube);else{if(void 0===b.__webglInit)break a;r.deleteTexture(b.__webglTexture)}W.delete(a)}la.textures--}
 function f(a){a=a.target;a.removeEventListener("dispose",f);var b=W.get(a),c=W.get(a.texture);if(a&&void 0!==c.__webglTexture){r.deleteTexture(c.__webglTexture);if(a instanceof THREE.WebGLRenderTargetCube)for(c=0;6>c;c++)r.deleteFramebuffer(b.__webglFramebuffer[c]),r.deleteRenderbuffer(b.__webglRenderbuffer[c]);else r.deleteFramebuffer(b.__webglFramebuffer),r.deleteRenderbuffer(b.__webglRenderbuffer);W.delete(a.texture);W.delete(a)}la.textures--}function h(a){a=a.target;a.removeEventListener("dispose",
 h);l(a);W.delete(a)}function l(a){var b=W.get(a).program;a.program=void 0;void 0!==b&&ua.releaseProgram(b)}function k(a,b){return b[0]-a[0]}function m(a,b){return a.object.renderOrder!==b.object.renderOrder?a.object.renderOrder-b.object.renderOrder:a.material.id!==b.material.id?a.material.id-b.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 n(a,b,c,d,e){var f;c.transparent?
-(d=da,f=++Y):(d=ca,f=++fa);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=V.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:V.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)ea.push(a);else if(a instanceof THREE.Sprite)ha.push(a);else if(a instanceof THREE.LensFlare)ja.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===aa.sortObjects&&(V.setFromMatrixPosition(a.matrixWorld),V.applyProjection(xa)),
-n(a,null,a.material,V.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===Ba.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===aa.sortObjects&&(V.setFromMatrixPosition(a.matrixWorld),V.applyProjection(xa));var d=va.update(a);if(c instanceof THREE.MeshFaceMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c<g;c++){var h=e[c],l=f[h.materialIndex];!0===l.visible&&
-n(a,d,l,V.z,h)}else n(a,d,c,V.z,null)}}d=a.children;c=0;for(g=d.length;c<g;c++)q(d[c],b)}}function s(a,b,c,d,e){for(var f=0,g=a.length;f<g;f++){var h=a[f],l=h.object,k=h.geometry,n=void 0===e?h.material:e,h=h.group;l.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,l.matrixWorld);l.normalMatrix.getNormalMatrix(l.modelViewMatrix);if(l instanceof THREE.ImmediateRenderObject){t(n);var m=v(b,c,d,n,l);sa="";l.render(function(a){aa.renderBufferImmediate(a,m,n)})}else aa.renderBufferDirect(b,c,d,k,
-n,l,h)}}function t(a){a.side!==THREE.DoubleSide?J.enable(r.CULL_FACE):J.disable(r.CULL_FACE);J.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?J.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):J.setBlending(THREE.NoBlending);J.setDepthFunc(a.depthFunc);J.setDepthTest(a.depthTest);J.setDepthWrite(a.depthWrite);J.setColorWrite(a.colorWrite);J.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}function v(a,
-b,c,d,e){ya=0;var f=W.get(d);if(d.needsUpdate||!f.program){a:{var g=W.get(d),k=ua.getParameters(d,b,c,e),n=ua.getProgramCode(d,k),m=g.program,q=!0;if(void 0===m)d.addEventListener("dispose",h);else if(m.code!==n)l(d);else if(void 0!==k.shaderID)break a;else q=!1;q&&(k.shaderID?(m=THREE.ShaderLib[k.shaderID],g.__webglShader={name:d.type,uniforms:THREE.UniformsUtils.clone(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}):g.__webglShader={name:d.type,uniforms:d.uniforms,vertexShader:d.vertexShader,
-fragmentShader:d.fragmentShader},d.__webglShader=g.__webglShader,m=ua.acquireProgram(d,k,n),g.program=m,d.program=m);k=m.getAttributes();if(d.morphTargets)for(n=d.numSupportedMorphTargets=0;n<aa.maxMorphTargets;n++)0<=k["morphTarget"+n]&&d.numSupportedMorphTargets++;if(d.morphNormals)for(n=d.numSupportedMorphNormals=0;n<aa.maxMorphNormals;n++)0<=k["morphNormal"+n]&&d.numSupportedMorphNormals++;g.uniformsList=[];var k=g.program.getUniforms(),p;for(p in g.__webglShader.uniforms)(n=k[p])&&g.uniformsList.push([g.__webglShader.uniforms[p],
-n])}d.needsUpdate=!1}n=m=q=!1;g=f.program;p=g.getUniforms();k=f.__webglShader.uniforms;g.id!==Aa&&(r.useProgram(g.program),Aa=g.id,n=m=q=!0);d.id!==ta&&(-1===ta&&(n=!0),ta=d.id,m=!0);if(q||a!==ra)r.uniformMatrix4fv(p.projectionMatrix,!1,a.projectionMatrix.elements),ia.logarithmicDepthBuffer&&r.uniform1f(p.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==ra&&(ra=a),(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshPhysicalMaterial||d.envMap)&&void 0!==
-p.cameraPosition&&(V.setFromMatrixPosition(a.matrixWorld),r.uniform3f(p.cameraPosition,V.x,V.y,V.z)),(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshPhysicalMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&void 0!==p.viewMatrix&&r.uniformMatrix4fv(p.viewMatrix,!1,a.matrixWorldInverse.elements);d.skinning&&(e.bindMatrix&&void 0!==p.bindMatrix&&r.uniformMatrix4fv(p.bindMatrix,!1,e.bindMatrix.elements),
-e.bindMatrixInverse&&void 0!==p.bindMatrixInverse&&r.uniformMatrix4fv(p.bindMatrixInverse,!1,e.bindMatrixInverse.elements),ia.floatVertexTextures&&e.skeleton&&e.skeleton.useVertexTexture?(void 0!==p.boneTexture&&(q=x(),r.uniform1i(p.boneTexture,q),aa.setTexture(e.skeleton.boneTexture,q)),void 0!==p.boneTextureWidth&&r.uniform1i(p.boneTextureWidth,e.skeleton.boneTextureWidth),void 0!==p.boneTextureHeight&&r.uniform1i(p.boneTextureHeight,e.skeleton.boneTextureHeight)):e.skeleton&&e.skeleton.boneMatrices&&
-void 0!==p.boneGlobalMatrices&&r.uniformMatrix4fv(p.boneGlobalMatrices,!1,e.skeleton.boneMatrices));if(m){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhysicalMaterial||d.lights){if(wa){var n=!0,s,t=q=0,w=0,v,G,E,z=Ca,B=a.matrixWorldInverse,F=z.directional.colors,K=z.directional.positions,
-I=z.point.colors,N=z.point.positions,Q=z.point.distances,C=z.point.decays,H=z.spot.colors,P=z.spot.positions,T=z.spot.distances,R=z.spot.directions,J=z.spot.anglesCos,ea=z.spot.exponents,M=z.spot.decays,da=z.hemi.skyColors,ca=z.hemi.groundColors,S=z.hemi.positions,fa=0,Y=0,U=0,ha=0,ja=0,X=0,ma=0,$=0,ba=s=0;c=E=ba=0;for(m=b.length;c<m;c++)s=b[c],v=s.color,G=s.intensity,E=s.distance,s instanceof THREE.AmbientLight?s.visible&&(q+=v.r,t+=v.g,w+=v.b):s instanceof THREE.DirectionalLight?(ja+=1,s.visible&&
-(Z.setFromMatrixPosition(s.matrixWorld),V.setFromMatrixPosition(s.target.matrixWorld),Z.sub(V),Z.transformDirection(B),s=3*fa,K[s+0]=Z.x,K[s+1]=Z.y,K[s+2]=Z.z,D(F,s,v,G),fa+=1)):s instanceof THREE.PointLight?(X+=1,s.visible&&(ba=3*Y,D(I,ba,v,G),V.setFromMatrixPosition(s.matrixWorld),V.applyMatrix4(B),N[ba+0]=V.x,N[ba+1]=V.y,N[ba+2]=V.z,Q[Y]=E,C[Y]=0===s.distance?0:s.decay,Y+=1)):s instanceof THREE.SpotLight?(ma+=1,s.visible&&(ba=3*U,D(H,ba,v,G),Z.setFromMatrixPosition(s.matrixWorld),V.copy(Z).applyMatrix4(B),
-P[ba+0]=V.x,P[ba+1]=V.y,P[ba+2]=V.z,T[U]=E,V.setFromMatrixPosition(s.target.matrixWorld),Z.sub(V),Z.transformDirection(B),R[ba+0]=Z.x,R[ba+1]=Z.y,R[ba+2]=Z.z,J[U]=Math.cos(s.angle),ea[U]=s.exponent,M[U]=0===s.distance?0:s.decay,U+=1)):s instanceof THREE.HemisphereLight&&($+=1,s.visible&&(Z.setFromMatrixPosition(s.matrixWorld),Z.transformDirection(B),E=3*ha,S[E+0]=Z.x,S[E+1]=Z.y,S[E+2]=Z.z,v=s.color,s=s.groundColor,D(da,E,v,G),D(ca,E,s,G),ha+=1));c=3*fa;for(m=Math.max(F.length,3*ja);c<m;c++)F[c]=0;
-c=3*Y;for(m=Math.max(I.length,3*X);c<m;c++)I[c]=0;c=3*U;for(m=Math.max(H.length,3*ma);c<m;c++)H[c]=0;c=3*ha;for(m=Math.max(da.length,3*$);c<m;c++)da[c]=0;c=3*ha;for(m=Math.max(ca.length,3*$);c<m;c++)ca[c]=0;z.directional.length=fa;z.point.length=Y;z.spot.length=U;z.hemi.length=ha;z.ambient[0]=q;z.ambient[1]=t;z.ambient[2]=w;wa=!1}n?(n=Ca,k.ambientLightColor.value=n.ambient,k.directionalLightColor.value=n.directional.colors,k.directionalLightDirection.value=n.directional.positions,k.pointLightColor.value=
-n.point.colors,k.pointLightPosition.value=n.point.positions,k.pointLightDistance.value=n.point.distances,k.pointLightDecay.value=n.point.decays,k.spotLightColor.value=n.spot.colors,k.spotLightPosition.value=n.spot.positions,k.spotLightDistance.value=n.spot.distances,k.spotLightDirection.value=n.spot.directions,k.spotLightAngleCos.value=n.spot.anglesCos,k.spotLightExponent.value=n.spot.exponents,k.spotLightDecay.value=n.spot.decays,k.hemisphereLightSkyColor.value=n.hemi.skyColors,k.hemisphereLightGroundColor.value=
-n.hemi.groundColors,k.hemisphereLightDirection.value=n.hemi.positions,u(k,!0)):u(k,!1)}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshPhysicalMaterial){k.opacity.value=d.opacity;k.diffuse.value=d.color;d.emissive&&(k.emissive.value=d.emissive);k.map.value=d.map;k.specularMap.value=d.specularMap;k.alphaMap.value=d.alphaMap;d.aoMap&&(k.aoMap.value=d.aoMap,k.aoMapIntensity.value=d.aoMapIntensity);var O;d.map?
-O=d.map:d.specularMap?O=d.specularMap:d.displacementMap?O=d.displacementMap:d.normalMap?O=d.normalMap:d.bumpMap?O=d.bumpMap:d.alphaMap?O=d.alphaMap:d.emissiveMap&&(O=d.emissiveMap);void 0!==O&&(O instanceof THREE.WebGLRenderTarget&&(O=O.texture),n=O.offset,O=O.repeat,k.offsetRepeat.value.set(n.x,n.y,O.x,O.y));k.envMap.value=d.envMap;k.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio}d instanceof THREE.LineBasicMaterial?
-(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.PointsMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size,k.scale.value=L.height/2,k.map.value=d.map,null!==d.map&&(a=d.map.offset,O=d.map.repeat,k.offsetRepeat.value.set(a.x,a.y,O.x,O.y))):d instanceof THREE.MeshPhongMaterial?
-(k.specular.value=d.specular,k.shininess.value=Math.max(d.shininess,1E-4),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&(k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&(k.displacementMap.value=d.displacementMap,k.displacementScale.value=d.displacementScale,k.displacementBias.value=d.displacementBias)):
-d instanceof THREE.MeshPhysicalMaterial?(k.roughness.value=d.roughness,k.metalness.value=d.metalness,d.roughnessMap&&(k.roughnessMap.value=d.roughnessMap),d.reflectivityMap&&(k.reflectivityMap.value=d.reflectivityMap),d.metalnessMap&&(k.metalnessMap.value=d.metalnessMap),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&(k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),d.normalMap&&(k.normalMap.value=
-d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&(k.displacementMap.value=d.displacementMap,k.displacementScale.value=d.displacementScale,k.displacementBias.value=d.displacementBias),d.envMap&&(k.envMapIntensity.value=d.envMapIntensity)):d instanceof THREE.MeshDepthMaterial?(k.mNear.value=a.near,k.mFar.value=a.far,k.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(k.opacity.value=d.opacity);if(ga.enabled&&e.receiveShadow&&!d._shadowPass&&k.shadowMatrix)for(a=
-d=0,O=b.length;a<O;a++)n=b[a],!0===n.castShadow&&(n instanceof THREE.PointLight||n instanceof THREE.SpotLight||n instanceof THREE.DirectionalLight)&&(c=n.shadow,n instanceof THREE.PointLight?(V.setFromMatrixPosition(n.matrixWorld).negate(),c.matrix.identity().setPosition(V),k.shadowDarkness.value[d]=-c.darkness):k.shadowDarkness.value[d]=c.darkness,k.shadowMatrix.value[d]=c.matrix,k.shadowMap.value[d]=c.map,k.shadowMapSize.value[d]=c.mapSize,k.shadowBias.value[d]=c.bias,d++);b=f.uniformsList;f=0;
-for(d=b.length;f<d;f++)if(a=b[f][0],!1!==a.needsUpdate)switch(k=a.type,c=a.value,O=b[f][1],k){case "1i":r.uniform1i(O,c);break;case "1f":r.uniform1f(O,c);break;case "2f":r.uniform2f(O,c[0],c[1]);break;case "3f":r.uniform3f(O,c[0],c[1],c[2]);break;case "4f":r.uniform4f(O,c[0],c[1],c[2],c[3]);break;case "1iv":r.uniform1iv(O,c);break;case "3iv":r.uniform3iv(O,c);break;case "1fv":r.uniform1fv(O,c);break;case "2fv":r.uniform2fv(O,c);break;case "3fv":r.uniform3fv(O,c);break;case "4fv":r.uniform4fv(O,c);
-break;case "Matrix3fv":r.uniformMatrix3fv(O,!1,c);break;case "Matrix4fv":r.uniformMatrix4fv(O,!1,c);break;case "i":r.uniform1i(O,c);break;case "f":r.uniform1f(O,c);break;case "v2":r.uniform2f(O,c.x,c.y);break;case "v3":r.uniform3f(O,c.x,c.y,c.z);break;case "v4":r.uniform4f(O,c.x,c.y,c.z,c.w);break;case "c":r.uniform3f(O,c.r,c.g,c.b);break;case "iv1":r.uniform1iv(O,c);break;case "iv":r.uniform3iv(O,c);break;case "fv1":r.uniform1fv(O,c);break;case "fv":r.uniform3fv(O,c);break;case "v2v":void 0===a._array&&
-(a._array=new Float32Array(2*c.length));m=k=0;for(n=c.length;k<n;k++,m+=2)a._array[m+0]=c[k].x,a._array[m+1]=c[k].y;r.uniform2fv(O,a._array);break;case "v3v":void 0===a._array&&(a._array=new Float32Array(3*c.length));m=k=0;for(n=c.length;k<n;k++,m+=3)a._array[m+0]=c[k].x,a._array[m+1]=c[k].y,a._array[m+2]=c[k].z;r.uniform3fv(O,a._array);break;case "v4v":void 0===a._array&&(a._array=new Float32Array(4*c.length));m=k=0;for(n=c.length;k<n;k++,m+=4)a._array[m+0]=c[k].x,a._array[m+1]=c[k].y,a._array[m+
-2]=c[k].z,a._array[m+3]=c[k].w;r.uniform4fv(O,a._array);break;case "m3":r.uniformMatrix3fv(O,!1,c.elements);break;case "m3v":void 0===a._array&&(a._array=new Float32Array(9*c.length));k=0;for(n=c.length;k<n;k++)c[k].flattenToArrayOffset(a._array,9*k);r.uniformMatrix3fv(O,!1,a._array);break;case "m4":r.uniformMatrix4fv(O,!1,c.elements);break;case "m4v":void 0===a._array&&(a._array=new Float32Array(16*c.length));k=0;for(n=c.length;k<n;k++)c[k].flattenToArrayOffset(a._array,16*k);r.uniformMatrix4fv(O,
+(d=da,f=++Y):(d=ca,f=++fa);f=d[f];void 0!==f?(f.id=a.id,f.object=a,f.geometry=b,f.material=c,f.z=V.z,f.group=e):(f={id:a.id,object:a,geometry:b,material:c,z:V.z,group:e},d.push(f))}function q(a,b){if(!1!==a.visible){if(a.layers.test(b.layers))if(a instanceof THREE.Light)ea.push(a);else if(a instanceof THREE.Sprite)!1!==a.frustumCulled&&!0!==Ba.intersectsObject(a)||ha.push(a);else if(a instanceof THREE.LensFlare)ja.push(a);else if(a instanceof THREE.ImmediateRenderObject)!0===aa.sortObjects&&(V.setFromMatrixPosition(a.matrixWorld),
+V.applyProjection(xa)),n(a,null,a.material,V.z,null);else if(a instanceof THREE.Mesh||a instanceof THREE.Line||a instanceof THREE.Points)if(a instanceof THREE.SkinnedMesh&&a.skeleton.update(),!1===a.frustumCulled||!0===Ba.intersectsObject(a)){var c=a.material;if(!0===c.visible){!0===aa.sortObjects&&(V.setFromMatrixPosition(a.matrixWorld),V.applyProjection(xa));var d=va.update(a);if(c instanceof THREE.MeshFaceMaterial)for(var e=d.groups,f=c.materials,c=0,g=e.length;c<g;c++){var h=e[c],l=f[h.materialIndex];
+!0===l.visible&&n(a,d,l,V.z,h)}else n(a,d,c,V.z,null)}}d=a.children;c=0;for(g=d.length;c<g;c++)q(d[c],b)}}function s(a,b,c,d,e){for(var f=0,g=a.length;f<g;f++){var h=a[f],l=h.object,k=h.geometry,n=void 0===e?h.material:e,h=h.group;l.modelViewMatrix.multiplyMatrices(b.matrixWorldInverse,l.matrixWorld);l.normalMatrix.getNormalMatrix(l.modelViewMatrix);if(l instanceof THREE.ImmediateRenderObject){t(n);var m=v(b,c,d,n,l);sa="";l.render(function(a){aa.renderBufferImmediate(a,m,n)})}else aa.renderBufferDirect(b,
+c,d,k,n,l,h)}}function t(a){a.side!==THREE.DoubleSide?J.enable(r.CULL_FACE):J.disable(r.CULL_FACE);J.setFlipSided(a.side===THREE.BackSide);!0===a.transparent?J.setBlending(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha):J.setBlending(THREE.NoBlending);J.setDepthFunc(a.depthFunc);J.setDepthTest(a.depthTest);J.setDepthWrite(a.depthWrite);J.setColorWrite(a.colorWrite);J.setPolygonOffset(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)}
+function v(a,b,c,d,e){ya=0;var f=W.get(d);if(d.needsUpdate||!f.program){a:{var g=W.get(d),k=ua.getParameters(d,b,c,e),n=ua.getProgramCode(d,k),m=g.program,q=!0;if(void 0===m)d.addEventListener("dispose",h);else if(m.code!==n)l(d);else if(void 0!==k.shaderID)break a;else q=!1;q&&(k.shaderID?(m=THREE.ShaderLib[k.shaderID],g.__webglShader={name:d.type,uniforms:THREE.UniformsUtils.clone(m.uniforms),vertexShader:m.vertexShader,fragmentShader:m.fragmentShader}):g.__webglShader={name:d.type,uniforms:d.uniforms,
+vertexShader:d.vertexShader,fragmentShader:d.fragmentShader},d.__webglShader=g.__webglShader,m=ua.acquireProgram(d,k,n),g.program=m,d.program=m);k=m.getAttributes();if(d.morphTargets)for(n=d.numSupportedMorphTargets=0;n<aa.maxMorphTargets;n++)0<=k["morphTarget"+n]&&d.numSupportedMorphTargets++;if(d.morphNormals)for(n=d.numSupportedMorphNormals=0;n<aa.maxMorphNormals;n++)0<=k["morphNormal"+n]&&d.numSupportedMorphNormals++;g.uniformsList=[];var k=g.program.getUniforms(),p;for(p in g.__webglShader.uniforms)(n=
+k[p])&&g.uniformsList.push([g.__webglShader.uniforms[p],n])}d.needsUpdate=!1}n=m=q=!1;g=f.program;p=g.getUniforms();k=f.__webglShader.uniforms;g.id!==Aa&&(r.useProgram(g.program),Aa=g.id,n=m=q=!0);d.id!==ta&&(-1===ta&&(n=!0),ta=d.id,m=!0);if(q||a!==ra)r.uniformMatrix4fv(p.projectionMatrix,!1,a.projectionMatrix.elements),ia.logarithmicDepthBuffer&&r.uniform1f(p.logDepthBufFC,2/(Math.log(a.far+1)/Math.LN2)),a!==ra&&(ra=a),(d instanceof THREE.ShaderMaterial||d instanceof THREE.MeshPhongMaterial||d instanceof
+THREE.MeshPhysicalMaterial||d.envMap)&&void 0!==p.cameraPosition&&(V.setFromMatrixPosition(a.matrixWorld),r.uniform3f(p.cameraPosition,V.x,V.y,V.z)),(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshPhysicalMaterial||d instanceof THREE.ShaderMaterial||d.skinning)&&void 0!==p.viewMatrix&&r.uniformMatrix4fv(p.viewMatrix,!1,a.matrixWorldInverse.elements);d.skinning&&(e.bindMatrix&&void 0!==p.bindMatrix&&r.uniformMatrix4fv(p.bindMatrix,
+!1,e.bindMatrix.elements),e.bindMatrixInverse&&void 0!==p.bindMatrixInverse&&r.uniformMatrix4fv(p.bindMatrixInverse,!1,e.bindMatrixInverse.elements),ia.floatVertexTextures&&e.skeleton&&e.skeleton.useVertexTexture?(void 0!==p.boneTexture&&(q=x(),r.uniform1i(p.boneTexture,q),aa.setTexture(e.skeleton.boneTexture,q)),void 0!==p.boneTextureWidth&&r.uniform1i(p.boneTextureWidth,e.skeleton.boneTextureWidth),void 0!==p.boneTextureHeight&&r.uniform1i(p.boneTextureHeight,e.skeleton.boneTextureHeight)):e.skeleton&&
+e.skeleton.boneMatrices&&void 0!==p.boneGlobalMatrices&&r.uniformMatrix4fv(p.boneGlobalMatrices,!1,e.skeleton.boneMatrices));if(m){c&&d.fog&&(k.fogColor.value=c.color,c instanceof THREE.Fog?(k.fogNear.value=c.near,k.fogFar.value=c.far):c instanceof THREE.FogExp2&&(k.fogDensity.value=c.density));if(d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhysicalMaterial||d.lights){if(wa){var n=!0,s,t=q=0,w=0,v,G,E,z=Ca,B=a.matrixWorldInverse,F=z.directional.colors,
+K=z.directional.positions,I=z.point.colors,N=z.point.positions,Q=z.point.distances,C=z.point.decays,H=z.spot.colors,P=z.spot.positions,T=z.spot.distances,R=z.spot.directions,J=z.spot.anglesCos,ea=z.spot.exponents,M=z.spot.decays,da=z.hemi.skyColors,ca=z.hemi.groundColors,S=z.hemi.positions,fa=0,Y=0,U=0,ha=0,ja=0,X=0,ma=0,$=0,ba=s=0;c=E=ba=0;for(m=b.length;c<m;c++)s=b[c],v=s.color,G=s.intensity,E=s.distance,s instanceof THREE.AmbientLight?s.visible&&(q+=v.r,t+=v.g,w+=v.b):s instanceof THREE.DirectionalLight?
+(ja+=1,s.visible&&(Z.setFromMatrixPosition(s.matrixWorld),V.setFromMatrixPosition(s.target.matrixWorld),Z.sub(V),Z.transformDirection(B),s=3*fa,K[s+0]=Z.x,K[s+1]=Z.y,K[s+2]=Z.z,D(F,s,v,G),fa+=1)):s instanceof THREE.PointLight?(X+=1,s.visible&&(ba=3*Y,D(I,ba,v,G),V.setFromMatrixPosition(s.matrixWorld),V.applyMatrix4(B),N[ba+0]=V.x,N[ba+1]=V.y,N[ba+2]=V.z,Q[Y]=E,C[Y]=0===s.distance?0:s.decay,Y+=1)):s instanceof THREE.SpotLight?(ma+=1,s.visible&&(ba=3*U,D(H,ba,v,G),Z.setFromMatrixPosition(s.matrixWorld),
+V.copy(Z).applyMatrix4(B),P[ba+0]=V.x,P[ba+1]=V.y,P[ba+2]=V.z,T[U]=E,V.setFromMatrixPosition(s.target.matrixWorld),Z.sub(V),Z.transformDirection(B),R[ba+0]=Z.x,R[ba+1]=Z.y,R[ba+2]=Z.z,J[U]=Math.cos(s.angle),ea[U]=s.exponent,M[U]=0===s.distance?0:s.decay,U+=1)):s instanceof THREE.HemisphereLight&&($+=1,s.visible&&(Z.setFromMatrixPosition(s.matrixWorld),Z.transformDirection(B),E=3*ha,S[E+0]=Z.x,S[E+1]=Z.y,S[E+2]=Z.z,v=s.color,s=s.groundColor,D(da,E,v,G),D(ca,E,s,G),ha+=1));c=3*fa;for(m=Math.max(F.length,
+3*ja);c<m;c++)F[c]=0;c=3*Y;for(m=Math.max(I.length,3*X);c<m;c++)I[c]=0;c=3*U;for(m=Math.max(H.length,3*ma);c<m;c++)H[c]=0;c=3*ha;for(m=Math.max(da.length,3*$);c<m;c++)da[c]=0;c=3*ha;for(m=Math.max(ca.length,3*$);c<m;c++)ca[c]=0;z.directional.length=fa;z.point.length=Y;z.spot.length=U;z.hemi.length=ha;z.ambient[0]=q;z.ambient[1]=t;z.ambient[2]=w;wa=!1}n?(n=Ca,k.ambientLightColor.value=n.ambient,k.directionalLightColor.value=n.directional.colors,k.directionalLightDirection.value=n.directional.positions,
+k.pointLightColor.value=n.point.colors,k.pointLightPosition.value=n.point.positions,k.pointLightDistance.value=n.point.distances,k.pointLightDecay.value=n.point.decays,k.spotLightColor.value=n.spot.colors,k.spotLightPosition.value=n.spot.positions,k.spotLightDistance.value=n.spot.distances,k.spotLightDirection.value=n.spot.directions,k.spotLightAngleCos.value=n.spot.anglesCos,k.spotLightExponent.value=n.spot.exponents,k.spotLightDecay.value=n.spot.decays,k.hemisphereLightSkyColor.value=n.hemi.skyColors,
+k.hemisphereLightGroundColor.value=n.hemi.groundColors,k.hemisphereLightDirection.value=n.hemi.positions,u(k,!0)):u(k,!1)}if(d instanceof THREE.MeshBasicMaterial||d instanceof THREE.MeshLambertMaterial||d instanceof THREE.MeshPhongMaterial||d instanceof THREE.MeshPhysicalMaterial){k.opacity.value=d.opacity;k.diffuse.value=d.color;d.emissive&&(k.emissive.value=d.emissive);k.map.value=d.map;k.specularMap.value=d.specularMap;k.alphaMap.value=d.alphaMap;d.aoMap&&(k.aoMap.value=d.aoMap,k.aoMapIntensity.value=
+d.aoMapIntensity);var O;d.map?O=d.map:d.specularMap?O=d.specularMap:d.displacementMap?O=d.displacementMap:d.normalMap?O=d.normalMap:d.bumpMap?O=d.bumpMap:d.alphaMap?O=d.alphaMap:d.emissiveMap&&(O=d.emissiveMap);void 0!==O&&(O instanceof THREE.WebGLRenderTarget&&(O=O.texture),n=O.offset,O=O.repeat,k.offsetRepeat.value.set(n.x,n.y,O.x,O.y));k.envMap.value=d.envMap;k.flipEnvMap.value=d.envMap instanceof THREE.WebGLRenderTargetCube?1:-1;k.reflectivity.value=d.reflectivity;k.refractionRatio.value=d.refractionRatio}d instanceof
+THREE.LineBasicMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity):d instanceof THREE.LineDashedMaterial?(k.diffuse.value=d.color,k.opacity.value=d.opacity,k.dashSize.value=d.dashSize,k.totalSize.value=d.dashSize+d.gapSize,k.scale.value=d.scale):d instanceof THREE.PointsMaterial?(k.psColor.value=d.color,k.opacity.value=d.opacity,k.size.value=d.size,k.scale.value=L.height/2,k.map.value=d.map,null!==d.map&&(a=d.map.offset,O=d.map.repeat,k.offsetRepeat.value.set(a.x,a.y,O.x,O.y))):d instanceof
+THREE.MeshPhongMaterial?(k.specular.value=d.specular,k.shininess.value=Math.max(d.shininess,1E-4),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&(k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&(k.displacementMap.value=d.displacementMap,k.displacementScale.value=d.displacementScale,k.displacementBias.value=
+d.displacementBias)):d instanceof THREE.MeshPhysicalMaterial?(k.roughness.value=d.roughness,k.metalness.value=d.metalness,d.roughnessMap&&(k.roughnessMap.value=d.roughnessMap),d.reflectivityMap&&(k.reflectivityMap.value=d.reflectivityMap),d.metalnessMap&&(k.metalnessMap.value=d.metalnessMap),d.lightMap&&(k.lightMap.value=d.lightMap,k.lightMapIntensity.value=d.lightMapIntensity),d.emissiveMap&&(k.emissiveMap.value=d.emissiveMap),d.bumpMap&&(k.bumpMap.value=d.bumpMap,k.bumpScale.value=d.bumpScale),
+d.normalMap&&(k.normalMap.value=d.normalMap,k.normalScale.value.copy(d.normalScale)),d.displacementMap&&(k.displacementMap.value=d.displacementMap,k.displacementScale.value=d.displacementScale,k.displacementBias.value=d.displacementBias),d.envMap&&(k.envMapIntensity.value=d.envMapIntensity)):d instanceof THREE.MeshDepthMaterial?(k.mNear.value=a.near,k.mFar.value=a.far,k.opacity.value=d.opacity):d instanceof THREE.MeshNormalMaterial&&(k.opacity.value=d.opacity);if(ga.enabled&&e.receiveShadow&&!d._shadowPass&&
+k.shadowMatrix)for(a=d=0,O=b.length;a<O;a++)n=b[a],!0===n.castShadow&&(n instanceof THREE.PointLight||n instanceof THREE.SpotLight||n instanceof THREE.DirectionalLight)&&(c=n.shadow,n instanceof THREE.PointLight?(V.setFromMatrixPosition(n.matrixWorld).negate(),c.matrix.identity().setPosition(V),k.shadowDarkness.value[d]=-c.darkness):k.shadowDarkness.value[d]=c.darkness,k.shadowMatrix.value[d]=c.matrix,k.shadowMap.value[d]=c.map,k.shadowMapSize.value[d]=c.mapSize,k.shadowBias.value[d]=c.bias,d++);
+b=f.uniformsList;f=0;for(d=b.length;f<d;f++)if(a=b[f][0],!1!==a.needsUpdate)switch(k=a.type,c=a.value,O=b[f][1],k){case "1i":r.uniform1i(O,c);break;case "1f":r.uniform1f(O,c);break;case "2f":r.uniform2f(O,c[0],c[1]);break;case "3f":r.uniform3f(O,c[0],c[1],c[2]);break;case "4f":r.uniform4f(O,c[0],c[1],c[2],c[3]);break;case "1iv":r.uniform1iv(O,c);break;case "3iv":r.uniform3iv(O,c);break;case "1fv":r.uniform1fv(O,c);break;case "2fv":r.uniform2fv(O,c);break;case "3fv":r.uniform3fv(O,c);break;case "4fv":r.uniform4fv(O,
+c);break;case "Matrix3fv":r.uniformMatrix3fv(O,!1,c);break;case "Matrix4fv":r.uniformMatrix4fv(O,!1,c);break;case "i":r.uniform1i(O,c);break;case "f":r.uniform1f(O,c);break;case "v2":r.uniform2f(O,c.x,c.y);break;case "v3":r.uniform3f(O,c.x,c.y,c.z);break;case "v4":r.uniform4f(O,c.x,c.y,c.z,c.w);break;case "c":r.uniform3f(O,c.r,c.g,c.b);break;case "iv1":r.uniform1iv(O,c);break;case "iv":r.uniform3iv(O,c);break;case "fv1":r.uniform1fv(O,c);break;case "fv":r.uniform3fv(O,c);break;case "v2v":void 0===
+a._array&&(a._array=new Float32Array(2*c.length));m=k=0;for(n=c.length;k<n;k++,m+=2)a._array[m+0]=c[k].x,a._array[m+1]=c[k].y;r.uniform2fv(O,a._array);break;case "v3v":void 0===a._array&&(a._array=new Float32Array(3*c.length));m=k=0;for(n=c.length;k<n;k++,m+=3)a._array[m+0]=c[k].x,a._array[m+1]=c[k].y,a._array[m+2]=c[k].z;r.uniform3fv(O,a._array);break;case "v4v":void 0===a._array&&(a._array=new Float32Array(4*c.length));m=k=0;for(n=c.length;k<n;k++,m+=4)a._array[m+0]=c[k].x,a._array[m+1]=c[k].y,
+a._array[m+2]=c[k].z,a._array[m+3]=c[k].w;r.uniform4fv(O,a._array);break;case "m3":r.uniformMatrix3fv(O,!1,c.elements);break;case "m3v":void 0===a._array&&(a._array=new Float32Array(9*c.length));k=0;for(n=c.length;k<n;k++)c[k].flattenToArrayOffset(a._array,9*k);r.uniformMatrix3fv(O,!1,a._array);break;case "m4":r.uniformMatrix4fv(O,!1,c.elements);break;case "m4v":void 0===a._array&&(a._array=new Float32Array(16*c.length));k=0;for(n=c.length;k<n;k++)c[k].flattenToArrayOffset(a._array,16*k);r.uniformMatrix4fv(O,
 !1,a._array);break;case "t":m=x();r.uniform1i(O,m);if(!c)continue;c instanceof THREE.CubeTexture||Array.isArray(c.image)&&6===c.image.length?A(c,m):c instanceof THREE.WebGLRenderTargetCube?y(c.texture,m):c instanceof THREE.WebGLRenderTarget?aa.setTexture(c.texture,m):aa.setTexture(c,m);break;case "tv":void 0===a._array&&(a._array=[]);k=0;for(n=a.value.length;k<n;k++)a._array[k]=x();r.uniform1iv(O,a._array);k=0;for(n=a.value.length;k<n;k++)c=a.value[k],m=a._array[k],c&&(c instanceof THREE.CubeTexture||
 c.image instanceof Array&&6===c.image.length?A(c,m):c instanceof THREE.WebGLRenderTarget?aa.setTexture(c.texture,m):c instanceof THREE.WebGLRenderTargetCube?y(c.texture,m):aa.setTexture(c,m));break;default:console.warn("THREE.WebGLRenderer: Unknown uniform type: "+k)}}r.uniformMatrix4fv(p.modelViewMatrix,!1,e.modelViewMatrix.elements);p.normalMatrix&&r.uniformMatrix3fv(p.normalMatrix,!1,e.normalMatrix.elements);void 0!==p.modelMatrix&&r.uniformMatrix4fv(p.modelMatrix,!1,e.matrixWorld.elements);return g}
 function u(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=